0

グリッド ビューの行を削除する win form のボタンがあります。

numberSettingTable.SelectedRows[0]

問題は、行を選択せず​​にボタンを押すと、null が送信されることです。Java では、行が選択されていないことを示す -1 が返されました。では、どうすればC#で同じことを達成できますか?.

if文を試してみました

numberSettingTable.SelectedRows[0] != null

しかし、うまくいきませんでした。

以下、エラー詳細です。

System.ArgumentOutOfRangeException は処理されませんでした Message=Index が範囲外でした。負ではなく、コレクションのサイズより小さくなければなりません。パラメーター名: index Source=mscorlib ParamName=index StackTrace: System.Collections.ArrayList.get_Item(Int32 インデックス) で System.Windows.Forms.DataGridViewSelectedRowCollection.get_Item(Int32 インデックス) で VetoSmsServer.mainForm.removeEntryBt_Click(オブジェクトの送信者、EventArgs e ) System.Windows.Forms.Button.OnClick(EventArgs e) の System.Windows.Forms.Control.OnClick(EventArgs e) の C:\WorkSpace\VetoSmsServer\VetoSmsServer\mainForm.cs:line 310 にあります。 Forms.Button.OnMouseUp(MouseEventArgs mevent) で System.Windows.Forms.Control.WmMouseUp(Message& m、MouseButtons ボタン、Int32 クリック) で System.Windows.Forms.Control.

4

4 に答える 4

1

コントロールで選択されている行があるかどうかを確認する必要がありますDataGridView。ある場合は、最初に選択したものまたはすべて選択したものを削除できます。次のスニペットは、選択した1つの行のみを削除する方法を示しています。また、コミットされていない新しい行を削除しようとしないように注意する必要があります。したがって、次の行を使用できます。

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 に答える
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 に答える
0

numberSettingsTable.SelectedRows が null になることはありませんが、行が選択されていない場合、Count プロパティは 0 (ゼロ) になります。

代わりにそれを確認してください:

if(dataGridView1.SelectedRows.Count > 0)
{

}
于 2012-10-29T13:53:25.163 に答える