2014-10-22 82 views
0

我有这个datagridView从一个对象获取数据。 我添加列是这样的:在datagridView中添加按钮现在工作onClick事件

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

检查'ColumnIndex'和'RowIndex'在'CellClick'事件 – vallabha 2014-10-22 07:27:48

+0

我应该怎么检查? 如果我不添加新列,click事件可以工作,但不会与新的@vallabha – Perf 2014-10-22 07:29:11

+0

一样,当您单击添加了异常的按钮正在引发或事件本身未触发时。 – vallabha 2014-10-22 07:34:19

回答

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..."; 
} 
+0

谢谢,虽然有一个问题,我如何获得所选行的第一列的值? – Perf 2014-10-22 08:02:24

+0

这是另一个问题,但我回答你听到。你可以使用'dataGridView1.Rows [dataGridView1.SelectedCells [0] .RowIndex] .Cells [0] .Value =“Changed Me”;' – 2014-10-22 08:14:50

0

也许这是一个缺陷BUT:

colUsers.Name = ""; 

套的列名在一个空字符串,而不是 “用户”。属性Text与属性Name不同。

colUsers.Name = "Users"; 

编辑:常量字符串

每当你想用你的代码中的字符串值,PLZ开始使用恒定的参考。这将使您的字符串值保持在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

+0

非常感谢你的解释:) – Perf 2014-10-22 08:14:01