To get the selected rows in a DataGridView control Use the SelectedRows property. To enable users to select rows, you must set the SelectionMode property to FullRowSelect or RowHeaderSelect.C# Copy Code private void selectedRowsButton_Click(object sender, System.EventArgs e) { Int32 selectedRowCount = dataGridView1.Rows.GetRowCount(DataGridViewElementStates.Selected); if (selectedRowCount > 0) { System.Text.StringBuilder sb = new System.Text.StringBuilder(); for (int i = 0; i < selectedRowCount; i++) { sb.Append("Row: "); sb.Append(dataGridView1.SelectedRows[i].Index.ToString()); sb.Append(Environment.NewLine); } sb.Append("Total: " + selectedRowCount.ToString()); MessageBox.Show(sb.ToString(), "Selected Rows"); }
Use the SelectedCells property. Note Use the AreAllCellsSelected method to avoid showing a potentially large number of cells.
C# Copy Code private void selectedCellsButton_Click(object sender, System.EventArgs e) { Int32 selectedCellCount = dataGridView1.GetCellCount(DataGridViewElementStates.Selected); if (selectedCellCount > 0) { if (dataGridView1.AreAllCellsSelected(true)) { MessageBox.Show("All cells are selected", "Selected Cells"); } else { System.Text.StringBuilder sb = new System.Text.StringBuilder(); for (int i = 0; i < selectedCellCount; i++) { sb.Append("Row: "); sb.Append(dataGridView1.SelectedCells[i].RowIndex .ToString()); sb.Append(", Column: "); sb.Append(dataGridView1.SelectedCells[i].ColumnIndex .ToString()); sb.Append(Environment.NewLine); } sb.Append("Total: " + selectedCellCount.ToString()); MessageBox.Show(sb.ToString(), "Selected Cells"); } } }
参看msdn, Res After calling CancelEdit, all changes to the row are rolled back. You can also roll back changes by calling RejectChanges on the parent DataTable.即你调用完CancelEdit,还要对绑定的数据源调用RejectChanges方法
或者
设置DataKeyNames,然后同过关键值找到DataTable中的那个行
((DataRowView) gvVersion.SelectedRow.DataItem).Row
都是正确的.
http://www.syncfusion.com/FAQ/WindowsForms/FAQ_c44c.aspx#q934q
Use the SelectedRows property. To enable users to select rows, you must set the SelectionMode property to FullRowSelect or RowHeaderSelect.C# Copy Code
private void selectedRowsButton_Click(object sender, System.EventArgs e)
{
Int32 selectedRowCount =
dataGridView1.Rows.GetRowCount(DataGridViewElementStates.Selected);
if (selectedRowCount > 0)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder(); for (int i = 0; i < selectedRowCount; i++)
{
sb.Append("Row: ");
sb.Append(dataGridView1.SelectedRows[i].Index.ToString());
sb.Append(Environment.NewLine);
} sb.Append("Total: " + selectedRowCount.ToString());
MessageBox.Show(sb.ToString(), "Selected Rows");
}
Use the SelectedCells property. Note
Use the AreAllCellsSelected method to avoid showing a potentially large number of cells.
C# Copy Code
private void selectedCellsButton_Click(object sender, System.EventArgs e)
{
Int32 selectedCellCount =
dataGridView1.GetCellCount(DataGridViewElementStates.Selected);
if (selectedCellCount > 0)
{
if (dataGridView1.AreAllCellsSelected(true))
{
MessageBox.Show("All cells are selected", "Selected Cells");
}
else
{
System.Text.StringBuilder sb =
new System.Text.StringBuilder(); for (int i = 0;
i < selectedCellCount; i++)
{
sb.Append("Row: ");
sb.Append(dataGridView1.SelectedCells[i].RowIndex
.ToString());
sb.Append(", Column: ");
sb.Append(dataGridView1.SelectedCells[i].ColumnIndex
.ToString());
sb.Append(Environment.NewLine);
} sb.Append("Total: " + selectedCellCount.ToString());
MessageBox.Show(sb.ToString(), "Selected Cells");
}
}
}
我原来提这个问题为了解决下面这个问题,即选中DataGridView中的一行,对选中数据进行修改,但没有递交到数据库,然后按一下取消,就可以恢复到该行未修改前的状态。可是我得到了选中行对应的DataRow后,调用其CancelEdit()方法后,DataRow的RowState仍然是Modified,DataGridView的数据也没有恢复到修改前状态。
DataRow是用下面语句获得的
BindingManagerBase bm = DataGridView1.BindingContext[DataGridView1.DataSource];
DataRow dr = ((DataRowView)bm.Current).Row;
Res
After calling CancelEdit, all changes to the row are rolled back. You can also roll back changes by calling RejectChanges on the parent DataTable.即你调用完CancelEdit,还要对绑定的数据源调用RejectChanges方法