问题是这样的:我想获取一个用于选择的模式对话框的内容,然后用代码修改DataGridView单元格的内容模式对话框是使用CellDoubleClick事件显示的开始的时候,我使用DataTable和DataGridView绑定,然后修改DataTable的单元格内容,只是不添加行的修改是没有问题的,如果需要添加行的话,就会出问题,我使用的是如下代码
private void ExecProductSelectDialog(DataGridViewCellEventArgs e)
{
ProductSelect productSelect = new ProductSelect();
productSelect.ShowDialog();
if (productSelect.IsSubmited)
{
if (e.RowIndex == dtOrder.Rows.Count)//当点击最下面的空行时
{
DataRow dr = dtOrder.NewRow();
dr[0] = productSelect.Product.Brand;//Brand中存放productSelect中选择的结果,是String类型
dtOrder.Rows.Add(dr);
dgvSaleList.DataSource = dtOrder;
}
}当需要在DataTable中添加一行的,但是DataGridView控件中会显示添加两行,上面一行是我添加的并且修改的,下面一行是自己多出的空行。(最下面还有一行DataGridView原本就有的空行,我指的多出来的行不是只这行)
后来我尝试不使用DataTable来绑定,想直接使用DataGridView.Rows.Add()方法来添加行
但是单元格的内容怎么修改不了呢?
if(e.RowIndex == dgvSaleList.Rows.Count - 1)
{
dgvSaleList.Rows.Add();
}
dgvSaleList.Rows[e.RowIndex].Cells[0].Value = productSelect.Product.Brand; if(e.RowIndex == dgvSaleList.Rows.Count - 1)
{
dgvSaleList.Rows.Add();
}
DataGridViewTextBoxCell cell0 = new DataGridViewTextBoxCell();
cell0.Value = productSelect.Product.Brand;
dgvSaleList.Rows[e.RowIndex].Cells[0] = cell0;两种方式都不行。使用第一种方式的话,在调试的时候,对Value赋值的语句执行后,Value值依旧是null,没有改变。求问大大们。。如何解决这个问题。。谢谢。。
private void ExecProductSelectDialog(DataGridViewCellEventArgs e)
{
ProductSelect productSelect = new ProductSelect();
productSelect.ShowDialog();
if (productSelect.IsSubmited)
{
if (e.RowIndex == dtOrder.Rows.Count)//当点击最下面的空行时
{
DataRow dr = dtOrder.NewRow();
dr[0] = productSelect.Product.Brand;//Brand中存放productSelect中选择的结果,是String类型
dtOrder.Rows.Add(dr);
dgvSaleList.DataSource = dtOrder;
}
}当需要在DataTable中添加一行的,但是DataGridView控件中会显示添加两行,上面一行是我添加的并且修改的,下面一行是自己多出的空行。(最下面还有一行DataGridView原本就有的空行,我指的多出来的行不是只这行)
后来我尝试不使用DataTable来绑定,想直接使用DataGridView.Rows.Add()方法来添加行
但是单元格的内容怎么修改不了呢?
if(e.RowIndex == dgvSaleList.Rows.Count - 1)
{
dgvSaleList.Rows.Add();
}
dgvSaleList.Rows[e.RowIndex].Cells[0].Value = productSelect.Product.Brand; if(e.RowIndex == dgvSaleList.Rows.Count - 1)
{
dgvSaleList.Rows.Add();
}
DataGridViewTextBoxCell cell0 = new DataGridViewTextBoxCell();
cell0.Value = productSelect.Product.Brand;
dgvSaleList.Rows[e.RowIndex].Cells[0] = cell0;两种方式都不行。使用第一种方式的话,在调试的时候,对Value赋值的语句执行后,Value值依旧是null,没有改变。求问大大们。。如何解决这个问题。。谢谢。。
解决方案 »
- DataGridView中用DataSet实现数据显示的方法?
- 学习Remoting 时遇到了一个错误..大家帮忙看看。。。。
- 如何判断字符串20070912是符合yyyyMMdd的时间格式?
- 如何将数据表的行与列调转?
- 怎么把查询,删除,修改的内容显示到DataGridView 上啊(急啊 ....)
- 用c# 实现 modbus协议
- 用c#吧获取的图片存储到数据库并且能读出来 如何实现,语法怎么写
- 请确保此代码文件中定义的类与“inherits”属性匹配,并且该类扩展的基类(例如 Page 或 UserControl)是正确的。
- 请问如何读写内存数据(数据的地址已知)
- 求一正则:整数或2位小数的数字,有格式的哦。
- mdx的helloworld程序一运行就出现异常:FileNotFoundException
- 没盘怎么安装IIS的frontpage扩展?
看来是点击最下面一个空行的事件里的问题。但是具体的原因还是不明白。。还有DataGridView单元格怎么赋值呢。。还是不清楚。。
回复huihui:
我没有说清,是这样的,假设我没有对新添加的行内容进行编辑,点击最下面的空行后,本来想要出现的效果是有两个空行,比原来多了一个空行,这是想要的效果。
但是实际的效果是,点击最下面的空行后,一次性的添加了两行,也就是说,现在是有三个空行在末尾。。我有在调试里看过,第一次运行完AddRow以后,DataTable的行数从原来的0变成了1,这是正确的,然而,函数运行过后,界面显示出的,却是添加了两行。如果再次点击最下面的空行,再次进入添加行的事件中,我发现DataTable的行数自己变成了2。。退出函数前Count是1,再次进入的时候就变成了2。。还有说到DataGridView单元格的。真的太奇怪了,为什么就不行呢。。赋值完了还是null回复wxhx0502:
cellFormating事件是怎么触发的呢?为什么我打开窗体后,就使劲的弹出模式对话框,一个关了就再出现一个。。好像不太适合。。
你完全可以把新增的行隐藏掉,LZ是不是担心隐藏掉后会在添加行时报错?这个隐藏的代码你可以写在dataGridView的网络全部绘制完成的事件里,那样就不会报错了
dataGridView.Rows[dataGridView.RowCount-1].Cells[列索引].Values=值
循环赋的话直接
for(int i=0;i<dataGridView.RowCount-1;i++)
{
//..
}看了下你前面的代码: if(e.RowIndex == dgvSaleList.Rows.Count - 1)
{
dgvSaleList.Rows.Add();
}
DataGridViewTextBoxCell cell0 = new DataGridViewTextBoxCell();
cell0.Value = productSelect.Product.Brand;
dgvSaleList.Rows[e.RowIndex].Cells[0] = cell0;
你这个是什么意思呢?如果你之前dataGridView.Rows[e.RowIndex].Cells[0]是有值的话
你修改时可以直接赋值的
dataGridView.Rows[e.RowIndex].Cess[0].Value="值";