Winform下的Datagrid的列风格(1)—DataGridComboBoxColumnclass  DataGridComboBoxColumn: DataGridColumnStyle 
{
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        
private ComboBox myComboBox = new ComboBox ();
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        
private DataView ChoiceDataViewSource;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        
private string ChoiceDisplayField;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        
private string ChoiceValueField;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        
private bool isEditing;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        
public DataGridComboBoxColumn(DataView ChoiceDataViewSource,string ChoiceDisplayField,string ChoiceValueField) : base() 
{
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
this.ChoiceDataViewSource =ChoiceDataViewSource;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
this.ChoiceDisplayField =ChoiceDisplayField;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
this.ChoiceValueField =ChoiceValueField;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            myComboBox.DropDownStyle 
=System.Windows .Forms .ComboBoxStyle .DropDownList  ;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            myComboBox.Visible 
= false;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            myComboBox.DataSource 
=this.ChoiceDataViewSource;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            myComboBox.DisplayMember
= this.ChoiceDisplayField;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            myComboBox.ValueMember 
=this.ChoiceValueField;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        }

Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        
protected override void Abort(int rowNum)
{
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            isEditing 
= false;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            myComboBox.SelectedIndexChanged 
-= 
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                
new EventHandler(ComboBoxSelectedIndexChanged );
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            Invalidate();
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        }

Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        
protected override bool Commit
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            (CurrencyManager dataSource, 
int rowNum) 
{
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            myComboBox.Bounds 
= Rectangle.Empty;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn         
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            myComboBox.SelectedIndexChanged 
-= 
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                
new EventHandler(ComboBoxSelectedIndexChanged );
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
if (!isEditing)
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                
return true;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            isEditing 
= false;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
try 
{
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                System.Object  value 
= myComboBox.SelectedValue;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                SetColumnValueAtRow(dataSource, rowNum, value);
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            }
 
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
catch (Exception) 
{
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                Abort(rowNum);
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                
return false;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            }

Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            Invalidate();
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
return true;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        }

Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        
protected override void Edit(
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            CurrencyManager source, 
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
int rowNum,
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            Rectangle bounds, 
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
bool readOnly,
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
string instantText, 
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
bool cellIsVisible) 
{
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
object value =GetColumnValueAtRow(source, rowNum);
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
if (cellIsVisible) 
{
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                myComboBox.Bounds 
= new Rectangle
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                    (bounds.X 
+ 2, bounds.Y + 2
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                    bounds.Width 
- 4, bounds.Height - 4);
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                
int i=    Find (value);
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                
if (myComboBox.Items .Count >i) 
{
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                    myComboBox.SelectedIndex 
=i;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                }

Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                myComboBox.Visible 
= true;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                myComboBox.SelectedIndexChanged 
+= 
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                    
new EventHandler(ComboBoxSelectedIndexChanged );
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            }
 
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
else 
{
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                myComboBox.SelectedIndex 
=this.Find (value);
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                myComboBox.Visible 
= false;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            }

Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
if (myComboBox.Visible)
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                DataGridTableStyle.DataGrid.Invalidate(bounds);
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        }

Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        
protected int Find(System.Object value)
{
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
int int1;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
int int2;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            int2
=ChoiceDataViewSource.Count ;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
if (int2<=0)
{
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                
return -1;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            }

Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
for (int1=0;int1<int2;int1++)
{
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                
if (ChoiceDataViewSource[int1][this.myComboBox .ValueMember ].ToString ().Trim ()==value.ToString ().Trim ())
{
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                    
return int1;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                }

Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            }

Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
return -1;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        }

Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        
protected override Size GetPreferredSize(
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            Graphics g, 
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
object value) 
{
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
return new Size(100, myComboBox.PreferredHeight+ 4);
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        }

Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        
protected override int GetMinimumHeight() 
{
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
return myComboBox.PreferredHeight + 4;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        }

Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        
protected override int GetPreferredHeight(Graphics g, 
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
object value) 
{
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
return myComboBox.PreferredHeight + 4;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        }

Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        
protected override void Paint(Graphics g, 
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            Rectangle bounds, 
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            CurrencyManager source, 
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
int rowNum) 
{
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            Paint(g, bounds, source, rowNum, 
false);
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        }

Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        
protected override void Paint(
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            Graphics g, 
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            Rectangle bounds,
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            CurrencyManager source, 
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
int rowNum,
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
bool alignToRight) 
{
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            Paint(
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                g,bounds, 
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                source, 
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                rowNum, 
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                Brushes.Red, 
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                Brushes.Blue, 
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                alignToRight);
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        }

Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        
protected override void Paint(
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            Graphics g, 
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            Rectangle bounds,
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            CurrencyManager source, 
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
int rowNum,
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            Brush backBrush, 
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            Brush foreBrush,
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
bool alignToRight) 
{
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
object value=GetColumnValueAtRow(source, rowNum);
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
int int1=Find (value);
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
string display="";
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
if (int1>=0)
{
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                display
=this.ChoiceDataViewSource [int1][this.myComboBox .DisplayMember ].ToString ();
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            }

Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            Rectangle rect 
= bounds;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            g.FillRectangle(backBrush,rect);
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            rect.Offset(
02);
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            rect.Height 
-= 2;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            g.DrawString(display, 
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                
this.DataGridTableStyle.DataGrid.Font, 
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                foreBrush, rect);
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        }

Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        
protected override void SetDataGridInColumn(DataGrid value) 
{
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
base.SetDataGridInColumn(value);
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
if (myComboBox.Parent != null
{
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                myComboBox.Parent.Controls.Remove 
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                    (myComboBox);
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            }

Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
if (value != null
{
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn                value.Controls.Add(myComboBox);
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            }

Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        }

Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        
private void ComboBoxSelectedIndexChanged(object sender, EventArgs e) 
{
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
this.isEditing = true;
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn            
base.ColumnStartedEditing(myComboBox);
Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn        }

Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn    }

Winform下的Datagrid的列风格(1)—DataGridComboBoxColumn
使用例:
    表T1(学生档案)    学生ID(主键) 
                                        班级ID_Point
                                       学生姓名
    表T2(班级档案)     班级ID(主键)
                                      班级名称
    T1.班级ID_Point=T2.班级ID
    在datagrid显示学生档案时要同时显示班级名称,并可使用下拉列表调整学生所属班级。datagrid的班级ID列可使用DataGridComboBoxColumn列样式。datagrid的DataGridComboBoxColumn(班级ID)列需单独传递班级档案数据源(T2的dataview),显示的字段名称(班级名称),值字段名称(班级ID)。datagrid生成时先生成各列DataGridColumnStyle(遇到DataGridComboBoxColumn时,load班级档案数据并传参),再生成DataGridTableStyle,将各DataGridColumnStyle加入到DataGridTableStyle,最后将DataGridTableStyle加入到datagrid。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-07
  • 2021-08-29
  • 2021-06-04
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-06
  • 2021-10-09
相关资源
相似解决方案