提一个DataGrid的Cell里加入ComboBox的问题,高分求解(.Net 2003)
冬官 2007-01-29 11:22:38 问题简要描述:
我用的.Net2003,我想把DataGrid的一列加入ComboBox,但DataGrid每一行的ComboBox的内容是不同的,所以我的办法是DataGrid的CurrentCellChange的时候,动态new一个ComboBox,填入内容,并指定SelectIndex或SelectValue
问题源码:
private void LoadProductColor(string ProductCode,string CellText)
{
if(ProductCode!="")
{
ComboBox cmbProductColor = new ComboBox();
cmbProductColor.Cursor=System.Windows.Forms.Cursors.Arrow;
cmbProductColor.DropDownStyle=ComboBoxStyle.DropDownList;
cmbProductColor.Dock= DockStyle.Fill;
m_ds_Color =m_pds.GetProductColorsByProductCode(ProductCode);
if(m_ds_Color.Tables["TProductColor"].Rows.Count==0)
MessageBox.Show("商品数据不全,根据商品编码找不到商品的颜色记录。","提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
else
{
cmbProductColor.DataSource = m_ds_Color.Tables["TProductColor"];
cmbProductColor.DisplayMember = "ProductColor";
cmbProductColor.ValueMember = "PKID";
cmbProductColor.SelectedIndexChanged+=new System.EventHandler(this.cmbProductColor_SelectedIndexChanged);
cmbProductColor.SelectedValue = Convert.ToInt32(m_ds_Color.Tables["TProductColor"].Rows[0]["PKID"]);
DataGridTextBoxColumn dgtb=(DataGridTextBoxColumn)this.datagrid1.TableStyles["TPurchaseOrderItem"].GridColumnStyles[datagrid1.dataSource.Tables["TPurchaseOrderItem"].Columns.IndexOf("颜色")];
dgtb.TextBox.Controls.Clear();
dgtb.TextBox.Controls.Add(cmbProductColor);
if(CellText!="" && m_ds_Color.Tables["TProductColor"].Select("ProductColor" + " = '" + CellText + "'").Length>0)
{
int t;
t = Convert.ToInt32(m_ds_Color.Tables["TProductColor"].Select("ProductColor" + " = '" + CellText + "'")[0]["PKID"]);
cmbProductColor.SelectedValue = t;
}
}
}
}
我现在碰到的问题是:
第一,当我给DataSource,DisplayMember和ValueMember赋值以后,ComboBox的Items.Count仍旧是0,导致SelectedValue第一次赋值无效,调试的时候可以看到SelectedValue="未定义的值"。
第二,当dgtb.TextBox.Controls.Add(cmbProductColor);这句执行后,ComboBox的Items.Count有时会正确=2,有时会=0,尤其鼠标第一次点进DataGrid时,出现了奇怪的现象,单步调试到这语句执行完Count=0,但是如果过个1、2分钟,Count自己又会变成2,我什么也没做。换句话说,如果不设断点,程序执行肯定不是预期结果,如果在断点处停留几分钟,等Count变成2再运行下去,结果就是正确的了。
郁闷3天了,高分求解