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