c# - 如何在 wpf datagrid 中获取所选单元格的行标题值?

标签 c# wpf xaml datagrid

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

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>

代码 -

我如何操作列标题 -

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

我如何操作行标题-

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

获取列标题和单元格值 -

 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);
        }                
     }
 }

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

enter image description here

最佳答案

您需要先获取 DataGridRow 才能访问其 Header

您可以使用 ItemContainerGenerator.ContainerFromItem() 获取 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());
    }
}

关于c# - 如何在 wpf datagrid 中获取所选单元格的行标题值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20799695/

相关文章:

c# - 在 fluentribbon 按钮中设置 xaml 图标

c# - Caliburn.micro 统一

c# - 绑定(bind)到 UserControl 的依赖属性

c# - 我可以调用这个 C# 类 "immutable"吗?

c# - 代码优先迁移是否自动在服务器上运行?

C# Mysql - 在异步等待服务器的数据库查询上使用锁

c# - 强制接口(interface)实现在 C# 中实现层次结构

c# - 以编程方式将按钮添加到wpf中的工具栏

c# - UWP 删除 Gridview 中的焦点边框

c# - 当用户键入速度太快时源不会更新