读书人

对C#的datagridview操作有些疑问

发布时间: 2012-09-25 09:55:59 作者: rapoo

对C#的datagridview操作有点疑问
下面的代码是动态添加一个column,然后自动设置勾选,但是为啥运行之后没有一个是已经被勾选的了呢??
在MesageBox里明明有2个显示已经勾选了。。。

C# code
                DataGridViewCheckBoxColumn c = new DataGridViewCheckBoxColumn();                c.HeaderText = "Mise En Vente";                c.Width = 150;                c.Name = "venteCheckBox";                dataGridViewOeuvres.Columns.Add(c);                                for(int i=0; i<  dataGridViewOeuvres.RowCount; ++i)                {                    CheckBox ck = new CheckBox();                    ck.Checked = Convert.ToInt32(dataGridViewOeuvres.Rows[i].Cells["miseEnVente"].Value)>0?true:false;                    dataGridViewOeuvres.Rows[i].Cells["venteCheckBox"].Value = ck;                    MessageBox.Show(dataGridViewOeuvres.Rows[i].Cells["venteCheckBox"].Value.ToString());                }            dataGridViewOeuvres.CellClick += DataGridCellClick;


还有就是事件处理里,不知道为什么报NullReference错误。。。
C# code
        void DataGridCellClick(object sender, DataGridViewCellEventArgs e)        {                        if(dataGridViewOeuvres.Columns[e.ColumnIndex].Name == "venteCheckBox")            {                MessageBox.Show(dataGridViewOeuvres.Rows[e.RowIndex].Cells["venteCheckBox"].Value.ToString());            }        }


[解决办法]
探讨

dataGridViewOeuvres.Rows[i].Cells["venteCheckBox"].Value = 1;//选中
你后面null错误,自己调试,看看带索引的地方的对象是否存在
特别是e.RowIndex,可能是-1,即标题行

[解决办法]
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.RowCount = 5;

DataGridViewCheckBoxColumn c = new DataGridViewCheckBoxColumn();
c.HeaderText = "Mise En Vente";
c.Width = 150;
c.Name = "venteCheckBox";
dataGridView1.Columns.Add(c);
for (int i = 0; i < dataGridView1.RowCount; i++)
{
dataGridView1.Rows[i].Cells[0].Value=i;
CheckBox ck = new CheckBox();
ck.Checked=(Convert.ToInt32(dataGridView1.Rows[i].Cells[0].Value)>0 ? true: false);
dataGridView1.Rows[i].Cells["venteCheckBox"].Value = ck.Checked;
}
dataGridView1.CellClick+=new DataGridViewCellEventHandler(dataGridView1_CellClick);
}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (dataGridView1.Columns[e.ColumnIndex].Name == "venteCheckBox")
MessageBox.Show(Convert.ToString(dataGridView1.Rows[e.RowIndex].Cells["venteCheckBox"].Value));
}


[解决办法]
dataGridViewOeuvres.Rows[i].Cells["venteCheckBox"].Value = ck;
怎么一个值会等一个checkBox?
[解决办法]
同上,你的程序得调试下。。逐步调试就可以看到到底哪里错了。。跟踪参数的变化就知道了啊

读书人网 >C#

热点推荐