gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:39:33 26 4
gpt4 key购买 nike

我从这段代码中获得了单元格值和单元格标题值。如何获取所选单元格的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com