Проблема с датагридом при выборе одной ячейки из ряда

1

Я постараюсь сделать его очень коротким и сладким. Я видел, как это сделать с помощью datagridview, но я не могу найти его с обычным datagrid. У меня есть событие SelectedCellsChanged, которое отключается, и я хочу получить поле в столбце в выбранной строке. Поэтому, когда они выбирают строку enite, я хочу вытащить поле truckercode, чтобы я мог выполнить SQL-запрос в ячейке loadercode этой строки. Я не занимаюсь привязкой для моего документа. Мой код для заполнения моей сетки данных

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

Но я получаю исключение Argument вне диапазона.

Другим полезным сообщением является Looping Through DataView

Теги:
wpf
datagrid
wpfdatagrid

2 ответа

2
Лучший ответ

Я решил свою собственную проблему. Я надеюсь, что тот, кто читает это в будущем, который хочет получить значение из выбранных столбцов из всей выбранной строки, будет использовать это. Этот пример будет печатать каждую ячейку для любого количества строк, которые они выбрали.

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

Если вы добавите grid.Count == 1, это предотвратит выключение нескольких строк из вашего кода. Таким образом, у вас есть только 1 строка в DataRowView, иначе у вас может быть несколько DataRowView.

2

Вы можете определить обработчик CellClick в вашем dataGrid

<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();
    }
  • 0
    Это хорошо, и все, но я хочу получить определенную ячейку, когда выделена вся строка, и пользователь не нажимает на эту ячейку.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню