【问题标题】:Datagrid Issue With Selecting One Cell Out Of A Row从一行中选择一个单元格的数据网格问题
【发布时间】:2023-03-24 06:50:02
【问题描述】:

我会尽量让它简短而甜美。我已经看到如何使用 datagridview 执行此操作,但我似乎无法使用普通数据网格找到它。我有一个 SelectedCellsChanged 事件触发,我想在选定行的列中获取一个字段。因此,当他们选择一个实体行时,我想拉出卡车司机代码字段,这样我就可以对该行的卡车司机代码单元格进行 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();
}

我认为基于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

【问题讨论】:

    标签: c# wpf datagrid wpfdatagrid


    【解决方案1】:

    我解决了我自己的问题。我希望将来阅读此内容并希望从整个选定行中的选定列中获取值的任何人都会使用它。此示例将打印每个单元格,无论他们选择了多少行。

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

    如果您添加 grid.Count == 1 它可以防止多行触发您的代码。所以你在 DataRowView 中只有 1 行,否则你可能有多个 DataRowViews。

    【讨论】:

      【解决方案2】:

      您可以在 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 中的单元格,将在您的背景类中触发以下方法。 'index' 是所选单元格包含的值:

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

      【讨论】:

      • 这很好,但我想在选择整行时获取某个单元格,而不是让用户自己点击那个给定的单元格。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-07
      • 2018-06-24
      相关资源
      最近更新 更多