我会尽量让它变得非常简短和甜美。我已经看到如何使用 datagridview 执行此操作,但我似乎无法使用普通的 datagrid 找到它。我有一个触发的 SelectedCellsChanged 事件,我想在选定行的列中获取一个字段。因此,当他们选择一个实体行时,我想提取 truckercode 字段,以便我可以对该行的 truckercode 单元格执行 SQL 查询。我没有为我的数据网格做绑定(bind)。我如何填充数据网格的代码是
using (SqlConnection connection = new SqlConnection("server=Server; database=db; user id=user; password=user"))
{
connection.Open();
using (SqlCommand command = new SqlCommand("SELECT * FROM SOMETABLE JOIN OTHERTABLE ON SOMETABLE.TRUCKERCODE = OTHERTABLE.TRUCKERCODE WHERE SOMETABLE.ACTIVE = 1 AND OTHERTABLE.ACTIVE = 1", connection))
{
SqlDataAdapter reader = new SqlDataAdapter(command);
DataSet dataSet = new DataSet();
reader.Fill(dataSet);
FirstGrid.ItemsSource = dataSet.Tables[0].DefaultView;
}
connection.Close();
connection.Dispose();
}
我认为基于DataGrid Get Selected我认为我的代码应该类似于
private void FirstGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
{
DataGrid grid = sender as DataGrid;
DataRowView row = grid.SelectedItems as DataRowView;
MessageBox.Show("" + grid.SelectedItems.Count);
if (grid.SelectedItems.Count > 0)
{
MessageBox.Show(row["TruckerCode"].ToString());
}
}
但是我得到一个参数超出范围的异常。
另一个有用的帖子是 Looping Through A DataView
最佳答案
我解决了我自己的问题。我希望将来阅读这篇文章的任何人想要从整个选定行的选定列中获取值时都会使用它。此示例将打印每个单元格,无论他们选择多少行。
var grid = FirstGrid.SelectedItems;
foreach(DataRowView row in grid)
{
if (grid.Count == 1)
{
MessageBox.Show(row["NameOfTheColumn"].ToString());
}
}
如果您添加 grid.Count == 1 它会阻止多行触发您的代码。所以您在 DataRowView 中只有 1 行,否则您可能有多个 DataRowView。
关于c# - 从一行中选择一个单元格的 Datagrid 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27911064/