0

我在 win 表单上有一个按钮,可以删除网格视图上的行。

numberSettingTable.SelectedRows[0]

问题是当我按下没有行选择的按钮时,它发送空值,在 java -1 中返回它告诉没有选择行。那么我怎样才能在 c# 中实现同样的效果呢?

我试过if语句

numberSettingTable.SelectedRows[0] != null

但它没有奏效。

以下是错误详情。

System.ArgumentOutOfRangeException 未处理 Message=Index 超出范围。必须是非负数且小于集合的大小。参数名称: index Source=mscorlib ParamName=index StackTrace: at System.Collections.ArrayList.get_Item(Int32 index) at System.Windows.Forms.DataGridViewSelectedRowCollection.get_Item(Int32 index) at VetoSmsServer.mainForm.removeEntryBt_Click(Object sender, EventArgs e ) 在 C:\WorkSpace\VetoSmsServer\VetoSmsServer\mainForm.cs:System.Windows.Forms.Control.OnClick(EventArgs e) 在 System.Windows.Forms.Button.OnClick(EventArgs e) 在 System.Windows 的第 310 行。 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 处 System.Windows.Forms.Control 处的 Forms.Button.OnMouseUp(MouseEventArgs 事件)。

4

4 回答 4

1

改为执行此检查

numberSettingTable.SelectedRows != null
于 2012-10-29T13:36:40.987 回答
1

您可以使用此代码

   // Get the currently selected row using the SelectedRow property.
    GridViewRow row = YourGridView.SelectedRow;
   if(row != null)
   {
     . . . .. 
   }  

链接完整示例:http: //msdn.microsoft.com/fr-fr/library/system.web.ui.webcontrols.gridview.selectedrow.aspx

2 另一种解决方案RowCommand event

void GridView_RowCommand(Object sender, GridViewCommandEventArgs e)
  {
    // If multiple buttons are used in a GridView control, use the
    // CommandName property to determine which button was clicked.
    if(e.CommandName=="Test")
    {
      // Convert the row index stored in the CommandArgument
      // property to an Integer.
      int index = Convert.ToInt32(e.CommandArgument);
    }
}

链接:http: //msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowcommand.aspx

于 2012-10-29T13:40:34.300 回答
1

您需要检查DataGridView控件中是否选择了任何行。如果有,您可以删除第一个选定的或全部选定的。以下代码段演示了删除唯一一个选定的行。另外您应该注意不要尝试删除未提交的新行。因此,您可以使用以下行:

DataGridViewRow dgrvr = numberSettingTable.SelectedRows[0];
          if(!dgrvr.IsNewRow)

完整的代码片段是这样的:

if(numberSettingTable.SelectedRows.Count>0)
{
      DataGridViewRow dgrvr = numberSettingTable.SelectedRows[0];
      if(!dgrvr.IsNewRow)
           numberSettingTable.Rows.Remove(dgrvr);   
}

为了删除多个选定的行,只需遍历 SelectedRows 集合。

于 2012-10-29T13:49:03.333 回答
0

numberSettingsTable.SelectedRows 永远不会为空,但是如果未选择任何行,则其 Count 属性将为 0(零)。

改为检查:

if(dataGridView1.SelectedRows.Count > 0)
{

}
于 2012-10-29T13:53:25.163 回答