选定数据网格中的列

时间:2013-11-29 13:41:49

标签: c# datagrid

我有代码从数据网格返回选定的行。 现在我想拥有第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 { }
        }

2 个答案:

答案 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;
}