在datagridView中添加按钮无法在Click事件中工作

本文关键字:Click 工作 事件 按钮 datagridView 添加 | 更新日期: 2023-09-27 18:27:27

我有一个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();
    } 
}

我得到一个错误:索引超出范围。必须是非负数并且小于集合的大小

在datagridView中添加按钮无法在Click事件中工作

您可以使用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...";
}

也许这是一个缺陷,但是:

colUsers.Name = ""; 

将列名设置为空字符串,而不是"Users"。属性Text与属性Name不同。

colUsers.Name = "Users";

EDIT:常量字符串

每当您想在代码中使用字符串值时,plz就会开始使用Constant引用。这将使您的字符串值保持在一个位置,而不是一直重复使用它们,因为您可能输入了错误的信息,从而导致错误的结果。

例如

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();
}

编辑:属性的完整列表

Datagridview按钮列属性:http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewbuttoncolumn_properties(v=vs.110).aspx