class
DataGridTextBindColumn:DataGridColumnStyle

{
private DataView ChoiceDataViewSource;
private string ChoiceDisplayField;
private string ChoiceValueField;
public DataGridTextBindColumn(DataView ChoiceDataViewSource,string ChoiceDisplayField,string ChoiceValueField) : base()

{
this.ChoiceDataViewSource =ChoiceDataViewSource;
this.ChoiceDisplayField =ChoiceDisplayField;
this.ChoiceValueField =ChoiceValueField;
}
protected override void Abort(int rowNum)

{
Invalidate();
}

protected override bool Commit
(CurrencyManager dataSource, int rowNum)

{
Invalidate();
return true;
}

protected override void Edit(
CurrencyManager source,
int rowNum,
Rectangle bounds,
bool readOnly,
string instantText,
bool cellIsVisible)

{

}
protected int Find(System.Object value)

{
int int1;
int int2;
int2=ChoiceDataViewSource.Count ;
if (int2<=0)

{
return -1;
}
for (int1=0;int1<int2;int1++)

{
if (ChoiceDataViewSource[int1][ChoiceValueField ].ToString ().Trim ()==value.ToString ().Trim ())

{
return int1;
}
}
return -1;
}

protected override Size GetPreferredSize(
Graphics g,
object value)

{
return new Size(100, 4);
}

protected override int GetMinimumHeight()

{
return 4;
}

protected override int GetPreferredHeight(Graphics g,
object value)

{
return 4;
}

protected override void Paint(Graphics g,
Rectangle bounds,
CurrencyManager source,
int rowNum)

{
Paint(g, bounds, source, rowNum, false);
}
protected override void Paint(
Graphics g,
Rectangle bounds,
CurrencyManager source,
int rowNum,
bool alignToRight)

{
Paint(
g,bounds,
source,
rowNum,
Brushes.Red,
Brushes.Blue,
alignToRight);
}
protected override void Paint(
Graphics g,
Rectangle bounds,
CurrencyManager source,
int rowNum,
Brush backBrush,
Brush foreBrush,
bool alignToRight)

{
object value=GetColumnValueAtRow(source, rowNum);
int int1=Find (value);
string display="";
if (int1>=0)

{
display=this.ChoiceDataViewSource [int1][ChoiceDisplayField].ToString ();
}
Rectangle rect = bounds;
g.FillRectangle(backBrush,rect);
rect.Offset(0, 2);
rect.Height -= 2;
g.DrawString(display,
this.DataGridTableStyle.DataGrid.Font,
foreBrush, rect);
}

protected override void SetDataGridInColumn(DataGrid value)

{

}

}
与DataGridComboBoxColumn的不同之处就是只显示学生所属的班级名称,但不能更改学生所属班级。一般情况在datagrid中要将此DataGridTextBindColumn列的readonly设为true。