2013-11-29 4 views
1

У меня есть код, который возвращает мне выбранную строку из datagrid. Теперь я хочу иметь значение 3-го столбца. код у меня ниже уже дает мне выбранную строкуСтолбец из выбранного Datagrid

private void BandGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 
      try 
      { 
       var row_list = GetDataGridRows(BandGrid); 
       foreach (DataGridRow single_row in row_list) 
       { 
        if (single_row.IsSelected == true) 
        { 

        } 
       } 

      } 
      catch { } 
     } 

ответ

1

Если предположить, что ваш DataGrid имеет базовую структуру данных, и вы не используете DataGridView, каждая строка представляет объект, как правило, в списке объектов. Вы можете просто передать выбранную строку в тип объекта и вытащить поле ячейки, которую вы хотите. Также вам не нужно перебирать каждый из них в списке. SelectedItem будет иметь то, что вы хотите.

Edited

private void BandGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     Band single_row = (Band)BandGrid.SelectedItem; 

     string cellValue = single_row.Picture; 

    } 

Edited Конец

Если у вас есть мульти выбора функции на что вам может понадобиться, чтобы вытащить все переборе SelectedItems. Примечание. Не изменяйте элементы в цикле foreach, это вызовет ошибки. Вам нужно будет сделать копию данных, если вам нужно изменить данные.

private void dataGrid1_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     listCells = new List<string>(); 
     foreach(MyClass single_row in BandGrid.SelectedItems) 
     { 

       //do something with the object 
      listCells.add(single_row.Picture); 
     } 

    } 

Пример программы. Это устанавливает DataSource для сетки в List<MyClass> и каждый раз, когда выбор изменяется textbox1 отображает данные в столбце c из выбранной строки.

public partial class MainWindow : Window 
    { 
     public class MyClass 
     { 
     public int a { get; set; } 
     public int b { get; set; } 
     public int c { get; set; } 
     public int d { get; set; } 
     } 
     public MainWindow() 
     { 
     InitializeComponent(); 
     MyClass obj; 
     List<MyClass> bind = new List<MyClass>(); 
     for (int i = 0; i < 10; i++) 
     { 
      obj = new MyClass(); 
      obj.a = i; 
      obj.b = 2*i; 
      obj.c = 3*i; 
      obj.d = 4*i; 
      bind.Add(obj); 
     } 

     dataGrid1.ItemsSource = bind; 
    } 

    private void dataGrid1_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 

     textBox1.Text = ((MyClass)dataGrid1.SelectedItem).c.ToString(); 



    } 
} 

Вот XAML

<Window x:Class="yo.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <DataGrid AutoGenerateColumns="True" Height="200" HorizontalAlignment="Left" Margin="116,116,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="344" SelectionChanged="dataGrid1_SelectionChanged" /> 
    <TextBox Height="23" HorizontalAlignment="Left" Margin="87,41,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" /> 
</Grid> 

+0

, если я изменяю myclass на строку, я получаю InvalidCastException. Кроме того, что такое yourField? – user2827958

+0

Какие данные вы показываете? Класс Myclass должен быть конкретным классом, отображаемым вашими данными. Поэтому у вас должен быть список источников . yourfield - значение поля, такое как int, string, float MyClass. –

+0

У меня есть это сейчас private void BandGrid_SelectionChanged (отправитель объекта, SelectionChangedEventArgs e) { Группы single_row = (группы) BandGrid.SelectedItem; var cell = single_row.yourField; } Я до сих пор не знаю, что делать с вашим экраном. Мне нужна колонка 3, и я не могу прочитать из кода, который я получаю столбец. 3 – user2827958

0
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
     var selectedValue = GridView1.SelectedRow.Cells[2].Text; 
} 
+0

BandGrid не содержит определение для 'SelectedRow' – user2827958

+0

является это веб-приложение или окно? – SpiderCode

+0

Я использую окно – user2827958

Смежные вопросы