我有这个datagridView从对象获取数据。 我添加这样的列:
dataGridView1.CellClick += dataGridView1_CellClick;
DataGridViewButtonColumn colUsers = new DataGridViewButtonColumn();
colUsers.UseColumnTextForButtonValue = true;
colUsers.Text = "Users";
colUsers.Name = "";
dataGridView1.Columns.Add(colUsers);
我添加了一个onclick事件,但是它没有用,我错过了什么?
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex > -1 && dataGridView1.Columns[e.ColumnIndex].Name == "Users")
{
name = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();
gtUserDetails.ShowDialog();
}
}
我收到错误消息:索引超出范围。必须是非负数且小于集合的大小。
答案 0 :(得分:1)
您可以使用is
运算符来检查:“您的单元格是其他按钮”
并使用CellContentClick
代替CellClick
,因为如果用户点击按钮的填充,则您的活动不会提升并等待点击您的按钮。
因此,您可以使用此活动
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (dataGridView1[e.ColumnIndex,e.RowIndex] is DataGridViewButtonCell)
(dataGridView1[e.ColumnIndex, e.RowIndex] as DataGridViewButtonCell).Value = "You Clicked Me...";
}
答案 1 :(得分:0)
也许这是一个缺陷但是:
colUsers.Name = "";
将您的列名设置为空字符串而不是"用户"。属性Text不与属性Name相同。
colUsers.Name = "Users";
编辑:常量字符串
每当您想在代码中使用字符串值时,plz就会开始使用Constant引用。这会将您的字符串值保留在1个位置,而不是一直重复使用它们,因为可能会给出错误的信息,导致错误的结果。
例如
const readonly string UserbuttonName = "Users";
private void CreatebuttonName()
{
colUsers.Name = UserbuttonName;
}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex > -1 && dataGridView1.Columns[e.ColumnIndex].Name == UserbuttonName)
DoSomething();
}
编辑:完整的属性列表
Datagridviewbutton列属性:http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewbuttoncolumn_properties(v=vs.110).aspx