Если предположить, что ваш 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>
, если я изменяю myclass на строку, я получаю InvalidCastException. Кроме того, что такое yourField? – user2827958
Какие данные вы показываете? Класс Myclass должен быть конкретным классом, отображаемым вашими данными. Поэтому у вас должен быть список источников. yourfield - значение поля, такое как int, string, float MyClass. –
У меня есть это сейчас private void BandGrid_SelectionChanged (отправитель объекта, SelectionChangedEventArgs e) { Группы single_row = (группы) BandGrid.SelectedItem; var cell = single_row.yourField; } Я до сих пор не знаю, что делать с вашим экраном. Мне нужна колонка 3, и я не могу прочитать из кода, который я получаю столбец. 3 – user2827958