如何在 wpf 数据网格中获取所选单元格的行标题值?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/20799695/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-13 10:19:03  来源:igfitidea点击:

how to get row header value in wpf datagrid for the selected cell?

c#wpfxamldatagrid

提问by Sagotharan

I got cell value & cell header value from this code. how to get row header value in wpf datagrid for the selected cell?

我从这段代码中得到了单元格值和单元格标题值。如何在 wpf 数据网格中获取所选单元格的行标题值?

XAML-

XAML-

<DataGrid Name="Grid1" Height="550" Width="850" AutoGenerateColumns="True" 
          CanUserResizeRows="False" CanUserDeleteRows="False"
          CanUserAddRows="False" AreRowDetailsFrozen="False"
          SelectionUnit="Cell" SelectedCellsChanged="Grid1_SelectedCellsChanged" 
          CellEditEnding="Grid1_CellEditEnding" LoadingRow="Grid1_LoadingRow">
   <DataGrid.Style>
      <Style TargetType="DataGrid">
         <Setter Property="AlternatingRowBackground" Value="LightYellow"/>
      </Style>
   </DataGrid.Style>
</DataGrid>

CODE -

代码 -

How i manipulate column header is -

我如何操作列标题是 -

 private DataTable _GameData;

public Grid()
        {
            _GameData = new DataTable();
            _GameData.Columns.Add(new DataColumn("Sunday", typeof(string)));
            _GameData.Columns.Add(new DataColumn("Monday", typeof(string)));
            _GameData.Columns.Add(new DataColumn("Tuesday", typeof(string)));
            _GameData.Columns.Add(new DataColumn("Wednesday", typeof(string)));
            _GameData.Columns.Add(new DataColumn("Thursday", typeof(string)));
            _GameData.Columns.Add(new DataColumn("Friday", typeof(string)));
            _GameData.Columns.Add(new DataColumn("Saturday", typeof(string)));

            for(int i=0;i<=23;i++)
            {
                var row = _GameData.NewRow();
                _GameData.Rows.Add(row);
                row["Sunday"] = "";
                row["Monday"] = "";
                row["Tuesday"] = "";
                row["Wednesday"] = "";
                row["Thursday"] = "";
                row["Friday"] = "";
                row["Saturday"] = "";            
            }
 InitializeComponent();

            Grid1.ItemsSource = _GameData.AsDataView();
            Grid1.RowHeaderWidth = 50;
            Grid1.ColumnWidth = 100;
        }

 public DataTable GameData
        { get { return _GameData; } }

How i manipulate row header-

我如何操作行标题-

 private void Grid1_LoadingRow(object sender, DataGridRowEventArgs e)
        {                    
            var id = e.Row.GetIndex();  


            switch (id)
            {
                case 0:
                    {
                        e.Row.Header = "12-00";
                        break;
                    }
                case 1:
                    {
                        e.Row.Header = "12-30";
                        break;
                    }
                case 2:
                    {
                        e.Row.Header = "1-00";
                        break;
                    }
                case 3:
                    {
                        e.Row.Header = "1-30";
                        break;
                    }
                case 4:
                    {
                        e.Row.Header = "2-00";
                        break;
                    }
                case 5:
                    {
                        e.Row.Header = "2-30";
                        break;
                    }
                case 6:
                    {
                        e.Row.Header = "3-00";
                        break;
                    }
                case 7:
                    {
                        e.Row.Header = "3-30";
                        break;
                    }
                case 8:
                    {
                        e.Row.Header = "4-00";
                        break;
                    }
                case 9:
                    {
                        e.Row.Header = "4-30";
                        break;
                    }
                case 10:
                    {
                        e.Row.Header = "5-00";
                        break;
                    }
                case 11:
                    {
                        e.Row.Header = "5-30";
                        break;
                    }
                case 12:
                    {
                        e.Row.Header = "6-00";
                        break;
                    }
                case 13:
                    {
                        e.Row.Header = "6-30";
                        break;
                    }
                case 14:
                    {
                        e.Row.Header = "7-00";
                        break;
                    }
                case 15:
                    {
                        e.Row.Header = "7-30";
                        break;
                    }
                case 16:
                    {
                        e.Row.Header = "8-00";
                        break;
                    }
                case 17:
                    {
                        e.Row.Header = "8-30";
                        break;
                    }
                case 18:
                    {
                        e.Row.Header = "9-00";
                        break;
                    }
                case 19:
                    {
                        e.Row.Header = "9-30";
                        break;
                    }
                case 20:
                    {
                        e.Row.Header = "10-00";
                        break;
                    }
                case 21:
                    {
                        e.Row.Header = "10-30";
                        break;
                    }
                case 22:
                    {
                        e.Row.Header = "11-00";
                        break;
                    }
                case 23:
                    {
                        e.Row.Header = "11-30";
                        break;
                    }               
                default:
                    {
                        break;
                    }
            }

Got Column Header & Cell value -

获得列标题和单元格值 -

 private void Grid1_SelectedCellsChanged(object sender,
                                         SelectedCellsChangedEventArgs e)
 {
     foreach (var item in e.AddedCells)
     {
        var col = item.Column as DataGridColumn;

        MessageBox.Show(""+col.Header);

        var fc = col.GetCellContent(item.Item);
        if (fc is TextBlock)
        {
            MessageBox.Show("Values" + (fc as TextBlock).Text);
        }                
     }
 }

Output -message show the selected column header value, Arrow Explain the Row header want to show.

输出 -消息显示选定的列标题值,箭头解释要显示的行标题。

enter image description here

在此处输入图片说明

采纳答案by Rohit Vats

You need to get DataGridRowfirst to access its Header.

您需要DataGridRow首先访问其Header.

DataGridRow you can get using ItemContainerGenerator.ContainerFromItem()method of sender dataGrid like this:

您可以使用ItemContainerGenerator.ContainerFromItem()发送方 dataGrid 方法获得 DataGridRow,如下所示:

private void Grid1_SelectedCellsChanged(object sender,
                                        SelectedCellsChangedEventArgs e)
{
    DataGrid dg = (DataGrid)sender;
    foreach (var item in e.AddedCells)
    {
        DataGridRow row = 
           (DataGridRow)dg.ItemContainerGenerator.ContainerFromItem(item.Item);

        var col = item.Column as DataGridColumn;

        MessageBox.Show("" + col.Header);

        var fc = col.GetCellContent(item.Item);
        if (fc is TextBlock)
        {
            MessageBox.Show("Values" + (fc as TextBlock).Text);
        }

        MessageBox.Show("Row Header " + row.Header.ToString());
    }
}