[英]Get value from selected row in dataGrid
I'm loading students into my datagrid and then want to assign them to a class. 我正在将学生加载到我的数据网格中,然后想将他们分配给一个班级。 I really don't care how exactly, but I can't get any method working.
我真的不在乎精确度如何,但是我无法使用任何方法。
I tried it with a context menu, but didn't manage to get the event (never worked with it before) Then I added a button in each row, but then I couldn't figure out how to get the row in which the button is. 我使用上下文菜单进行了尝试,但是没有设法获取事件(之前从未使用过),然后在每行中添加了一个按钮,但是后来我不知道如何获取该按钮所在的行是。 My last try was to get the selectedItem and use ToString() like on a combobox, but that didn't work either.
我的最后一次尝试是获取selectedItem并像在组合框上一样使用ToString(),但这也不起作用。
Check this out: 看一下这个:
private void dataGrid4_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
DataGrid dg = new DataGrid();
dg = (sender as DataGrid);
MessageBox.Show(dataGrid4.Items.GetItemAt(1).ToString());
MessageBox.Show(dataGrid4.CurrentItem.ToString() + "\n" + dataGrid4.CurrentCell.Column.ToString() + "\n" + dataGrid4.CurrentCell.Item.ToString() + "\n" + dataGrid4.SelectedItem.ToString() + "\n" + dataGrid4.SelectedValue.ToString() + "\n" + dataGrid4.SelectedIndex.ToString());
MessageBox.Show(dg.CurrentItem.ToString() + "\n" + dg.CurrentCell.Column.ToString() + "\n" + dg.CurrentCell.Item.ToString() + "\n" + dg.SelectedItem.ToString() + "\n" + dg.SelectedValue.ToString() + "\n" + dg.SelectedIndex.ToString());
}
Please help me out, I'm about to freak out.. ): 请帮帮我,我要吓坏了..):
You can get selected items from grid like this: 您可以像这样从网格中获取选定的项目:
<DataGrid Name="dgStudents"
AutoGenerateColumns="False"
SelectionChanged="dgStudents_SelectionChanged">
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding ID}" />
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridTextColumn Header="Surname" Binding="{Binding Surname}" />
</DataGrid.Columns>
</DataGrid>
Event handler: 事件处理程序:
private void dgStudents_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems != null && e.AddedItems.Count != 0)
{
foreach (Student item in e.AddedItems)
{
Console.WriteLine(item.ID);
}
}
}
Simple student class: 简单的学生班:
class Student
{
public int ID { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
}
If you want use context menu try this: 如果要使用上下文菜单,请尝试以下操作:
<DataGrid Name="dgStudents"
AutoGenerateColumns="False">
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Header="ClassA" Click="ClassA_Click" />
<MenuItem Header="ClassB" Click="ClassB_Click" />
</ContextMenu>
</DataGrid.ContextMenu>
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding ID}" />
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridTextColumn Header="Surname" Binding="{Binding Surname}" />
<DataGridTextColumn Header="Class" Binding="{Binding ClassName}" />
</DataGrid.Columns>
</DataGrid>
Add two event handler to MenuItem
in code-behind: 在代码后面的
MenuItem
中添加两个事件处理程序:
private void ClassA_Click(object sender, RoutedEventArgs e)
{
if (dgStudents.SelectedItems != null && dgStudents.SelectedItems.Count != 0)
{
foreach (Student item in dgStudents.SelectedItems)
{
item.ClassName = "ClassA";
}
dgStudents.Items.Refresh();
}
}
private void ClassB_Click(object sender, RoutedEventArgs e)
{
if (dgStudents.SelectedItems != null && dgStudents.SelectedItems.Count != 0)
{
foreach (Student item in dgStudents.SelectedItems)
{
item.ClassName = "ClassB";
}
dgStudents.Items.Refresh();
}
}
Change student class to this: 将学生班级更改为此:
class Student
{
public int ID { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public string ClassName { get; set; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.