wpf dataGrid 获取单元格,并对单元格中的对象操作
先上图:

要求:对第一行的“选项内容举例。。。”的控件进行隐藏,如下:

前端代码:
<Window x:Class="DataGridPractice.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:DataGridPractice"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800" Loaded="Window_Loaded">
<Grid>
<Grid.Resources> <DataTemplate x:Key="DateTemplate" >
<StackPanel DataContext="{Binding choseItems}">
<Border Background="LightBlue">
<TextBox Text="{Binding ChoseName}" Cursor="Arrow" Name="R0"/>
</Border>
<Border Background="White">
<TextBox Text="{Binding ChoseContent}" Cursor="Arrow" Name="R1"/>
</Border>
</StackPanel>
</DataTemplate> <DataTemplate x:Key="EditingDateTemplate"> </DataTemplate>
</Grid.Resources> <DataGrid AutoGenerateColumns="False" Name="datagrid1">
<DataGrid.Columns>
<DataGridTextColumn Header="ID值" Width="auto" Binding="{Binding questionID}" />
<DataGridTextColumn Header="题目" Width="auto" Binding="{Binding questionName}" />
<DataGridTemplateColumn Header="多行" Width="*" MinWidth="25"
CellTemplate="{StaticResource DateTemplate}" CellEditingTemplate="{StaticResource EditingDateTemplate}" IsReadOnly="True"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
后端代码;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading; namespace DataGridPractice
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
} class question
{
//题目ID号
public Int32 questionID { get; set; } //题目名,比如:第1题或第2题等
public string questionName { get; set; } //某题中"选项类"的集合,比如A-D
public ObservableCollection<choseItem> choseItems { get; set; }
public question(Int32 _id, string _questionname, ObservableCollection <choseItem> _choseitems)//构造函数
{
questionID = _id;
questionName = _questionname;
choseItems = _choseitems;
}
}
//选项类
class choseItem
{
//选项名,比如:A,B,C,D之类
public string ChoseName { get; set; }
//选项内容
public string ChoseContent { get; set; }
}
ObservableCollection <question> Questions = new ObservableCollection <question>();//题目数组 ObservableCollection<choseItem> ChoseItems = new ObservableCollection<choseItem>();//选项数组 private void Window_Loaded(object sender, RoutedEventArgs e)
{
string[] CharStr = new string[4] { "A", "B", "C", "D" };
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 4; j++)
{
choseItem item = new choseItem();//选项类
item.ChoseName = CharStr[j] + ":";
item.ChoseContent = "选项内容举例...";
ChoseItems.Add(item);
}
Questions.Add(new question(i, "__第" + (i + 1).ToString() + "题", ChoseItems));
}
datagrid1.ItemsSource = Questions; ShowChildCell(datagrid1, 2, 9);
} public static void ShowChildCell(DataGrid datagrid, int colNum, int childCellCount = 9)
{
DataGridTemplateColumn templeColumn = datagrid.Columns[colNum] as DataGridTemplateColumn;
if (templeColumn == null) return; DataGridCell dataGridCell = GetDataGridCell(datagrid, 0, colNum);
DataGridCellInfo dataGridCellInfo = new DataGridCellInfo(dataGridCell); object item = dataGridCellInfo.Item; FrameworkElement element = templeColumn.GetCellContent(item);
TextBox textBlockOther = (TextBox)templeColumn.CellTemplate.FindName("R1", element); textBlockOther.Visibility = Visibility.Hidden;
} public static DataGridCell GetDataGridCell(DataGrid datagrid, int rowIndex, int columnIndex)
{
try
{
DataGridRow rowContainer = GetDataGridRow(datagrid, rowIndex);
if (rowContainer != null)
{
DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(rowContainer);
//这行代码是通过行得到单元格 DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(columnIndex);
//这行代码是通过index得到具体的单元格 if (cell == null)
{
datagrid.ScrollIntoView(rowContainer, datagrid.Columns[columnIndex]);
cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(columnIndex);
}
return cell;
}
}
catch
{
return null;
}
return new DataGridCell();
} public static DataGridRow GetDataGridRow(DataGrid dataGrid, int index)
{
if (index >= dataGrid.Items.Count)
{
throw new IndexOutOfRangeException(String.Format("Index {0} is out of range.", index));
} DataGridRow row = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(index);
if (row == null)
{
// may be virtualized, bring into view and try again
dataGrid.ScrollIntoView(dataGrid.Items[index]);
WaitFor(TimeSpan.Zero, DispatcherPriority.SystemIdle);
row = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(index);
} return row;
}
public static void WaitFor(TimeSpan time, DispatcherPriority priority)
{
DispatcherTimer timer = new DispatcherTimer(priority);
timer.Tick += new EventHandler(OnDispatched);
timer.Interval = time;
DispatcherFrame dispatcherFrame = new DispatcherFrame(false);
timer.Tag = dispatcherFrame;
timer.Start();
Dispatcher.PushFrame(dispatcherFrame);
}
public static void OnDispatched(object sender, EventArgs args)
{
DispatcherTimer timer = (DispatcherTimer)sender;
timer.Tick -= new EventHandler(OnDispatched);
timer.Stop();
DispatcherFrame frame = (DispatcherFrame)timer.Tag;
frame.Continue = false;
} public static T GetVisualChild<T>(Visual parent) where T : Visual
{
T childContent = default(T);
int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < numVisuals; i++)
{
Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
childContent = v as T;
if (childContent == null)
{
childContent = GetVisualChild<T>(v);
}
if (childContent != null)
{
break;
}
}
return childContent;
}
}
}
wpf dataGrid 获取单元格,并对单元格中的对象操作的更多相关文章
- WPF DataGrid 获取选中 一行 或者 多行
WPF中DataGrid使用时,需要将其SelectedItem转换成DataRowView进行操作 然而SelectedItem 与SelectedItems DataGrid的SelectionU ...
- c# WPF DataGrid 获取选中单元格信息
private void Dg_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e) { Console.Write ...
- WPF DataGrid 获取当前行某列值
[0]是指当前行第1列的单元格位置 注意:DataRowView要求必须引用System.Data命名空间 方法一: DataRowView mySelectedElement = (DataRowV ...
- WPF DataGrid获取选择行的数据
在WPF中,单击DataGrid,如何获取当前点击的行? 比如在MouseDoubleClick事件中,事实上获取的选中行是一个DataRowview,你可以通过以下的方法来获取选中行的数据,需要引用 ...
- WPF datagrid 获取行或单格为NULL 问题
datagrid 属性 EnableRowVirtualization 设置为 false 解决...不要问我为什么. 害死我了
- 【转】WPF DataGrid 获取选中的当前行某列值
方法一:DataRowView mySelectedElement = (DataRowView)dataGrid1.SelectedItem; string result = mySelectedE ...
- WPF DataGrid 获取选中的当前行某列值
方法一: DataRowView mySelectedElement = (DataRowView)dataGrid1.SelectedItem; ]ToString(); 方法二: var a = ...
- wpf 前台获取资源文件路径问题
1 <ImageBrush ImageSource="YT.CM.CommonUI;component/Resource/FloadwindowImage/middle.png&quo ...
- 获取wpf datagrid当前被编辑单元格的内容
原文 获取wpf datagrid当前被编辑单元格的内容 确认修改单元个的值, 使用到datagrid的两个事件 开始编辑事件 BeginningEdit="dataGrid_Beginni ...
- WPF:获取DataGrid控件单元格DataGridCell
转载:http://blog.csdn.net/jhqin/article/details/7645357 /* ------------------------------------------- ...
随机推荐
- map方法整理数据,接口返回值进行处理
整理前: //map方法使thumb加上域名 --> var data =[ { id: "11", title: "新车小程序title1", thum ...
- Nextcloud的一些错误提示
Nextcloud的一些错误提示 PHP 内存限制低于建议值 512MB 您可以通过以下步骤增加PHP内存限制: 打开php.ini文件 在终端中输入以下命令打开php.ini文件: bash sud ...
- 目标库DML 堵塞(dblink)导致OGG延迟
[[toc]] # 问题概述xx库OGG延迟超过8个小时,但进程处于RUNNING.# 问题原因定位到有人通过A库的DBLINK修改目标库的数据. OGG同步的表, 目标的端也在做修改相同数据,无法保 ...
- FTP调优
最近在解决客户的问题时接触到了一些FTP的问题,自己在使用过程中发现了很多问题,所以这里总结了一些调优的办法: 服务:vsftp 非常安全文件传输 配置文件:/etc/vsftpd/vsftpd.co ...
- 将 ChatGPT 接入 Zabbix 为告警提供修复建议(对接钉钉)
1.如果接企业微信请参考下面的文章 https://www.txisfine.cn/archives/9c078bb7.html 感谢上述文章的作者提供的思路 ChatGPT 是最近很火的 AI 智能 ...
- bootstrapTable的一些属性
url : 'firmSoftTable.action', // 请求后台的URL(*) method : 'post', // 请求方式(*)post/get contentType: " ...
- python连接数据库系列
1.Python连接MySQL 具体详情参考:MySQL笔记 Python连接MySQL需要借助pymysql,安装pymysql pip install pymysql 1.1 pymysql连接数 ...
- 查电脑并修改IP地址,你晓得吗?
查电脑并修改IP地址,你晓得吗? 好记性不如烂笔头,古人的话,浅显却好有深意,越品越有味道. 每次都会忘记怎么查电脑IP,那么今天就写下来吧! 方法一:通过命令行查询IP地址 快捷键Win ...
- RestTemplate 远程服务调用
* 使用 Eureka 和 Nacos 为注册中心时也能使用这种方式调用 一.远程调用类 bean 配置注入 和 配置负载均衡 注意,必须在可配置类中注入 bean,例如 SpringBoot 启动 ...
- NSAttributedString 多格式字符串
NSString *aString = @"哈哈标题(必填)"; NSRange range = NSMakeRange(4, 4); //当然也可以查找NSRange range ...