从行中选择一个单元格时出现数据网格问题

本文关键字:数据 数据网 问题 网格 单元格 一个 选择 | 更新日期: 2023-09-27 18:37:25

我将尝试使它非常简短和甜蜜。我已经了解了如何使用数据网格视图执行此操作,但我似乎无法使用普通的数据网格找到它。我有一个 SelectedCellsChanged 事件触发,我想在所选行的列中获取一个字段。因此,当他们选择一个 enite 行时,我想拉取卡车司机代码字段,以便我可以对该行的卡车司机代码单元格进行 SQL 查询。我没有为我的数据网格执行绑定。我如何填充数据网格的代码是

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();
}

我认为基于数据网格被选中,我认为我的代码应该类似于

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());
        }
    }

但是我得到一个超出范围的参数异常。

另一个有用的帖子是循环浏览数据视图

从行中选择一个单元格时出现数据网格问题

我解决了自己的问题。我希望将来任何想要从整个选定行的选定列中获取值的人都会使用它。本示例将打印每个单元格选择的行数。

var grid = FirstGrid.SelectedItems;
foreach(DataRowView row in grid)
{
    if (grid.Count == 1)
    {
       MessageBox.Show(row["NameOfTheColumn"].ToString());
    }
}

如果添加网格。计数 == 1 它可以防止多行触发您的代码。因此,数据行视图中只有 1 行,否则您可能有多个数据行视图。

您可以在 dataGrid 中定义 CellClick 处理程序

<DataGrid x:Name="dataGrid1" HorizontalAlignment="Left" Margin="235,12,0,0" VerticalAlignment="Top" Height="218" Width="501" 
              AutoGenerateColumns="True" ItemsSource="{Binding}">
        <DataGrid.CellStyle>
            <Style TargetType="{x:Type DataGridCell}">
                <EventSetter Event="GotFocus" Handler="CellClick"/>
            </Style>
        </DataGrid.CellStyle>
</DataGrid>

然后,一旦用户单击 dataGrid 中的单元格,将在后台类中触发以下方法。"索引"是所选单元格包含的值:

void CellClick(object sender, RoutedEventArgs e)
    {
        DataGridCell cell = sender as DataGridCell;
        string index = cell.Column.DisplayIndex.ToString();
    }