我有代码从数据网格返回选定的行。 现在我想拥有第3列的值。 我下面的代码已经为我提供了选定的行
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 { }
}
答案 0 :(得分:1)
假设您的DataGrid具有底层数据结构而您没有使用datagridview,则每行代表一个对象,通常位于对象列表中。您可以将选定的行转换为对象的Type,然后拉出所需单元格的字段。此外,您不必遍历列表中的每个。 SelectedItem将拥有您想要的。
被修改
private void BandGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
Band single_row = (Band)BandGrid.SelectedItem;
string cellValue = single_row.Picture;
}
编辑结束
如果您有多选功能,则可能需要通过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>
答案 1 :(得分:0)
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
var selectedValue = GridView1.SelectedRow.Cells[2].Text;
}