WPF中 我自定义了一个模板列用于存放datetime类型并定义好显示格式,但是无法获取值

问题描述

我在dategrid控件中自定义了模板,用于存放datetime类型的数据,并固定好其显示格式!<Pagexmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:TestTreeView="clr-namespace:TestTreeView"x:Class="CK.enter.repertoryPage"mc:Ignorable="d"d:DesignHeight="550"d:DesignWidth="1000"Title="repertoryPage"><Grid><DataGridName="repertoryDG"HorizontalAlignment="Left"Margin="204,98,0,0"VerticalAlignment="Top"Height="442"Width="775"AutoGenerateColumns="False"CanUserAddRows="False"SelectionMode="Single"MouseRightButtonDown="repertoryDG_MouseRightButtonDown_1"LoadingRow="repertoryDG_LoadingRow"><DataGrid.Columns><DataGridTextColumnHeader="厂区"Width="45"Binding="{BindingAreaName}"/><DataGridTextColumnHeader="类别"Width="45"Binding="{BindingfoodClass}"/><DataGridTextColumnHeader="名称"Width="45"Binding="{BindingfoodName}"/><DataGridTemplateColumnHeader="入库时间"Width="100"><DataGridTemplateColumn.CellTemplate><DataTemplate><TextBlockText="{BindingPath=inputdate,StringFormat={}{0:yyyy-MM-ddHH:mm:ssfff}}"/></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn><DataGridTextColumnHeader="数量"Width="45"Binding="{Binding库存}"/><DataGridTextColumnHeader="单位"Width="45"Binding="{Bindingfoodunit}"/><DataGridTextColumnHeader="单价"Width="45"Binding="{BindingUnitprice}"/><DataGridTextColumnHeader="总价"Width="45"Binding="{Bindingnewtotalprice}"/><DataGridTemplateColumnHeader="生产日期"Width="80"><DataGridTemplateColumn.CellTemplate><DataTemplate><TextBlockText="{BindingPath=producedata,StringFormat={}{0:yyyy-MM-dd}}"/></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn><DataGridTemplateColumnHeader="到期日期"Width="80"><DataGridTemplateColumn.CellTemplate><DataTemplate><TextBlockText="{BindingPath=validperiod,StringFormat={}{0:yyyy-MM-dd}}"/></DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn></DataGrid.Columns><DataGrid.ContextMenu><ContextMenuName="dgmenu1"StaysOpen="true"><MenuItemHeader="出库"PreviewMouseLeftButtonDown="MenuItem_PreviewMouseLeftButtonDown"/></ContextMenu></DataGrid.ContextMenu></DataGrid><ComboBoxx:Name="FactAreaC"HorizontalAlignment="Left"Margin="99,10,0,0"VerticalAlignment="Top"Width="129"Height="43"/><TestTreeView:ZsmTreeViewx:Name="FoodTree"HorizontalAlignment="Left"Margin="30,58,0,0"VerticalAlignment="Top"Height="446"Width="133"/><LabelContent="厂区"HorizontalAlignment="Left"Margin="0,10,0,0"VerticalAlignment="Top"Height="43"Width="82"FontSize="24"/><DatePickerx:Name="BeginDateD"HorizontalAlignment="Left"Margin="358,16,0,0"VerticalAlignment="Top"Height="45"Width="168"FontSize="32"/><DatePickerx:Name="EndDateD"HorizontalAlignment="Left"Margin="642,16,0,0"VerticalAlignment="Top"Height="45"Width="168"FontSize="32"/><Buttonx:Name="InquiryButton"Content="查询"HorizontalAlignment="Left"Margin="864,16,0,0"VerticalAlignment="Top"Width="126"Height="45"FontSize="32"Click="InquiryButton_Click"/></Grid></Page>

我先将数据库中的数据导入到datagrid,然后通过代码获取自定义模板中的值,但是每次都获取不到,不知道是怎么回事!求大大帮忙啊,卡住这里了!privatevoidrepertoryDG_LoadingRow(objectsender,DataGridRowEventArgse){e.Row.MouseRightButtonDown+=(s,a)=>{a.Handled=true;inti=(senderasDataGrid).SelectedIndex=(sasDataGridRow).GetIndex();(senderasDataGrid).SelectedItem=(sasDataGridRow);if(i>=0){//取值DataGridCelldgc=((senderasDataGrid).Columns[8].GetCellContent((senderasDataGrid).Items[i]))asDataGridCell;MessageBox.Show((((senderasDataGrid).Columns[8].GetCellContent((senderasDataGrid).Items[i]))asTextBlock).Text.ToString());}(sasDataGridRow).Focus();//MessageBox.Show((sasDataGridRow).));//(senderasDataGrid).RowBackground=newSolidColorBrush(Color.FromRgb(245,241,144));(sasDataGridRow).Background=newSolidColorBrush(Color.FromRgb(245,241,144));dgmenu1.IsOpen=true;//repertoryDG.SelectedIndex=(sasDataGridRow).GetIndex();MessageBox.Show((senderasDataGrid).SelectedIndex.ToString());};}

运行到MessageBox.Show((((senderasDataGrid).Columns[8].GetCellContent((senderasDataGrid).Items[i]))asTextBlock).Text.ToString());}

都会报错

解决方案

解决方案二:
没人么,增加顶上去郁闷了!
解决方案三:
还木有人么?为什么就是取不到值呢,郁闷!
解决方案四:
LoadingRow的时候Dg的行都还没有初始化完,怎么可能获取到。在窗体Loaded事件中获取试试。
解决方案五:
引用3楼duanzi_peng的回复:

LoadingRow的时候Dg的行都还没有初始化完,怎么可能获取到。在窗体Loaded事件中获取试试。

我的datagrid控件有多个列,只有自定义的列模板中的值取不到,但是其他列中的值都能取到!是不是我的自定义列模板哪里有问题,导致其无法被获取到啊!
解决方案六:
引用4楼xu646663752的回复:

Quote: 引用3楼duanzi_peng的回复:
LoadingRow的时候Dg的行都还没有初始化完,怎么可能获取到。在窗体Loaded事件中获取试试。

我的datagrid控件有多个列,只有自定义的列模板中的值取不到,但是其他列中的值都能取到!是不是我的自定义列模板哪里有问题,导致其无法被获取到啊!

用这个方法试试,publicTGetChildObject<T>(DependencyObjectobj,stringname)whereT:FrameworkElement{DependencyObjectchild=null;TgrandChild=null;for(inti=0;i<=VisualTreeHelper.GetChildrenCount(obj)-1;i++){child=VisualTreeHelper.GetChild(obj,i);if(childisT&&(((T)child).Name==name|string.IsNullOrEmpty(name))){return(T)child;}else{grandChild=GetChildObject<T>(child,name);if(grandChild!=null)returngrandChild;}}returnnull;}

解决方案七:
引用5楼duanzi_peng的回复:

Quote: 引用4楼xu646663752的回复:
Quote: 引用3楼duanzi_peng的回复:
LoadingRow的时候Dg的行都还没有初始化完,怎么可能获取到。在窗体Loaded事件中获取试试。

我的datagrid控件有多个列,只有自定义的列模板中的值取不到,但是其他列中的值都能取到!是不是我的自定义列模板哪里有问题,导致其无法被获取到啊!

用这个方法试试,publicTGetChildObject<T>(DependencyObjectobj,stringname)whereT:FrameworkElement{DependencyObjectchild=null;TgrandChild=null;for(inti=0;i<=VisualTreeHelper.GetChildrenCount(obj)-1;i++){child=VisualTreeHelper.GetChild(obj,i);if(childisT&&(((T)child).Name==name|string.IsNullOrEmpty(name))){return(T)child;}else{grandChild=GetChildObject<T>(child,name);if(grandChild!=null)returngrandChild;}}returnnull;}

我打算从绑定的数据源获取数据了,郁闷死了!!!!就是自定义列获取不到!
解决方案八:
这个问题网上问的人很多,但是貌似没有啥解决办法,有没有大神啊!
解决方案九:
这个问题网上问的人很多,但是貌似没有啥解决办法,有没有大神啊!!不要沉啊不要沉啊!

时间: 2024-07-29 03:09:05

WPF中 我自定义了一个模板列用于存放datetime类型并定义好显示格式,但是无法获取值的相关文章

我在UpdatePanel中放入一个GridView,在GridView中的一个模板列中放入一个Menu,但更新GridView的数据后,增加的行中的Menu显示却有问题。

问题描述 我在UpdatePanel中放入一个GridView,在GridView中的一个模板列中放入一个Menu,但更新GridView的数据后,增加的行中的Menu显示却有问题,想请教是否有解决办法.谢谢! 解决方案 解决方案二:什么问题?解决方案三:好像updatepannel尚不能支持menu!

~求教 gridview中 如何实现两个模板列中 textbox控件的 实时变换呢 ? 类似TextChanged

问题描述 gridview中如何实现两个模板列中textbox控件的实时变换呢?类似TextChanged比如在模板列中有两个控件textbox1和textbox2如何实现当textbox1的值发生变化以后textbox2的值马上就变成textbox1的值乘以二就是下面的代码怎么能够在textbox1的值发生变化后改变焦点时马上实现呢??多谢各位大侠~for(i=0,i<10,i++){TextBoxtextbox1=(TextBox)GridView1.Rows[i].Cells[2].Fin

wpf 中 chart饼图的一个小问题求指教

问题描述 我在wpf中用chart画了个饼图当其中数据源中只有一个值得时候饼图不能显示出来求指教 解决方案 解决方案二:没有大神吗难道解决方案三:求图,求代码,这个好像很简单的,我刚做,dotnetcharting做得解决方案四:web项目里面运用的解决方案五:利用饼图分析人力资源情况示例privatevoidCreateImage(){//连数据库SqlConnectionCon=newSqlConnection(ConfigurationManager.AppSettings["ConSql

WPF中ICommand接口 的一个设计问题

public interface ICommand { // Summary: // Occurs when changes occur that affect whether or not the command should execute. event EventHandler CanExecuteChanged; bool CanExecute(object parameter); void Execute(object parameter); }   // Defines an obj

批量获取DataGrid控件模板列中的数据

datagrid|datagrid控件|模板|数据 批量获取DataGrid控件模板列中的数据 在DataGrid中一般只能单个获取每一行的数据,若要批量获取DataGrid控件中的数据必须对每一个模板列的控件进行扫描,获取其中的数据.我本想做的程序是根据不同的行数,由用户一次输入若干数据,提交后系统自动获取批量数据的程序.以下程序简单表达了需要实现的功能 test.aspx .......... <asp:DataGrid id="dgResult" runat="s

如何用代码生成模板列?

问题描述 因为模板列的个数不固定,所以想用代码生成模板列,大家有例子吗? 解决方案 解决方案二:mark.不太会解决方案三:try没有测试//定义一个模板,TemplateFieldtmp=newTemplateField();//你可以给你定义的模板加控件TextBoxt1=newTextBox();t1.Text="小Q";tmp.ItemTemplate.InstantiateIn(t1);//吧模板列给gridviewthis.GridView1.Columns.Add(tmp

在Sql2005中,向表中插入数据时遇到uniqueidentifier列,如何插入数据?

原文 http://blog.csdn.net/quou2002/article/details/596509 Sql2005中,提供了uniqueidentifier 数据类型.说白了,就是个GUID,这种类型开发时倒是很有必要的. 今天程序中遇到了这个问题:表里定义了一个uniqueidentifier 列,Asp.net程序需要向表中插入新的数据. Insert 语句由数据源控件自动生成:INSERT INTO [morning_Department] ([DepartmentId], [

求教:获得datagrid模板列里控件的值

问题描述 我用的2005我在datagrid模板列里绑定了一个textbox控件,在页面上另外有一个保存按钮,我想能实现在点击保存按钮的时候,获得textbox的值,但是我在响应点击事件的时候,通过findcontrol可以找到这个textbox,不过里面的值却始终为空.请大家帮忙啊!谢谢<asp:DataGridID="gdData"runat="server"CssClass="sdatagridex_a"CellPadding=&qu

向GridView的模板列绑定OnClientClick的函数时出现了奇怪的问题

原文:向GridView的模板列绑定OnClientClick的函数时出现了奇怪的问题      GridView的一个模板列中的内容是按钮,需要实现以下的效果:      GridView分页显示数据,点击编辑按钮(模板列)弹出模态窗口以编辑信息,编辑完成后刷新页面,若放弃编辑则不需要刷新页面. 这时就需要点击按钮后调用javascript函数以弹出模态窗口.最初使用以下的方法: CodeOnClientClick='return openEditWindow(<%#(DataBinder.E