WPF DataGrid

anbin0814 2011-07-01 11:45:45
我现在datagrid已经绑定了,有dataGrid1_MouseDoubleClick事件

假如,我选择第4行记录,我双击列头也会触发dataGrid1_MouseDoubleClick事件,怎么不让列头触发这个事件了。


<my:DataGrid Grid.Row="1" AutoGenerateColumns="False" ItemsSource="{Binding}" HorizontalAlignment="Center" VerticalAlignment="Top" Name="dataGrid1" SelectionMode="Single"
Height="342" Width="780" RowBackground="#FFDFF0F4" AlternatingRowBackground="#FFD0DEE6" ColumnHeaderHeight="25" RowHeight="25" RowHeaderWidth="0"
HorizontalGridLinesBrush="#FF7E9AB0" VerticalGridLinesBrush="#FF7E9AB0" Background="White" CanUserAddRows="False" CanUserDeleteRows="False"
CanUserResizeRows="False" MouseDoubleClick="dataGrid1_MouseDoubleClick">
<my:DataGrid.ColumnHeaderStyle>
<Style TargetType="my:DataGridColumnHeader" >
<Setter Property="Background" Value="#FFBFCFDC"/>
<Setter Property="SeparatorVisibility" Value="Visible" />
<Setter Property="SeparatorBrush" Value="Black" />
</Style>
</my:DataGrid.ColumnHeaderStyle>
<my:DataGrid.Columns>
<my:DataGridTemplateColumn Header="选择" Width="0.03*">
<my:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Name="chkPrint" IsChecked="{Binding IsChecked}" Click="chkPrint_Click"></CheckBox>
</DataTemplate>
</my:DataGridTemplateColumn.CellTemplate>
</my:DataGridTemplateColumn>
<my:DataGridTextColumn Header="序号" IsReadOnly="True" Binding="{Binding Order}" Width="0.03*"/>
<my:DataGridTextColumn Header="单据编号" IsReadOnly="True" Binding="{Binding No}" Width="0.1*"/>
<my:DataGridTextColumn Header="制单时间" IsReadOnly="True" Binding="{Binding CreateTime, Converter={StaticResource DataTimeConverter}}" Width="0.14*"/>
<my:DataGridTextColumn Header="单据类型" IsReadOnly="True" Binding="{Binding TypeName}" Width="0.1*"/>
<my:DataGridTextColumn Header="数量" IsReadOnly="True" Binding="{Binding Quantity}" Width="0.1*"/>
<my:DataGridTextColumn Header="制单人" IsReadOnly="True" Binding="{Binding Handler}" Width="0.1*"/>
</my:DataGrid.Columns>

</my:DataGrid>


...全文
288 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
anbin0814 2011-07-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jane_sl 的回复:]
DataGridColumnHeader 怎么不识别呢?只有DataGridColumn。if里面加上如下代码对吗?

C# code

XElement xe = XElement.Load(@"D:\WPF程序\Test\Test\test.xml");
var result = from x in xe.Elements()
……
[/Quote]

命名空间、、、
Jane_sl 2011-07-01
  • 打赏
  • 举报
回复
DataGridColumnHeader 怎么不识别呢?只有DataGridColumn。if里面加上如下代码对吗?

XElement xe = XElement.Load(@"D:\WPF程序\Test\Test\test.xml");
var result = from x in xe.Elements()
select x;

Console.WriteLine(xe);
this.dataGrid1.ItemsSource = result;
this.dataGrid1.Columns.Add(dgname);



anbin0814 2011-07-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jane_sl 的回复:]
引用 3 楼 anbin0814 的回复:
用程序把xml读取出来,然后再绑定啊。

解决办法

DataGridColumnHeader header=new DataGridColumnHeader();
if(e.MouseDevice.DirectlyOver.GetType().Equals(header.GetType()))
{
return;
}

是回复的我……
[/Quote]

可以看看这个

http://social.msdn.microsoft.com/Forums/zh-CN/wpfzhchs/thread/91118d02-96c6-4d74-b9e9-e8f1052bb032
anbin0814 2011-07-01
  • 打赏
  • 举报
回复
System.Data.DataSet ds = new System.Data.DataSet();
ds.ReadXml("");
System.Data.DataTable dt = ds.Tables[0];

再绑定datagrid 试试


<DataGrid ItemsSource="{Binding}" Grid.Row="3" Height="100" HorizontalAlignment="Left" Margin="0,8,0,0" Name="dataGrid2" VerticalAlignment="Top" Width="342">
</DataGrid>

有兴趣的可以加QQ群 101791551


anbin0814 2011-07-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jane_sl 的回复:]
引用 3 楼 anbin0814 的回复:
用程序把xml读取出来,然后再绑定啊。

解决办法

DataGridColumnHeader header=new DataGridColumnHeader();
if(e.MouseDevice.DirectlyOver.GetType().Equals(header.GetType()))
{
return;
}

是回复的我……
[/Quote]

private void dataGrid1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
DataGridColumnHeader header=new DataGridColumnHeader();
if(e.MouseDevice.DirectlyOver.GetType().Equals(header.GetType()))
{
return;
}
事件中的
Jane_sl 2011-07-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 anbin0814 的回复:]
用程序把xml读取出来,然后再绑定啊。

解决办法

DataGridColumnHeader header=new DataGridColumnHeader();
if(e.MouseDevice.DirectlyOver.GetType().Equals(header.GetType()))
{
return;
}
[/Quote]
是回复的我吗?e是什么意思?
我是这样读取xml的:

XElement xe = XElement.Load(@"D:\WPF程序\Test\Test\test.xml");
var result = from x in xe.Elements()
select x;

Console.WriteLine(xe);
this.dataGrid1.ItemsSource = result;
this.dataGrid1.Columns.Add(dgname);

可是在DataGrid中

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}" Grid.Row="3" Height="100" HorizontalAlignment="Left" Margin="0,8,0,0" Name="dataGrid2" VerticalAlignment="Top" Width="342">
<DataGrid.Columns>
<DataGridTextColumn Header="task" Binding="{Binding Path= Element.value}"/>
</DataGrid.Columns>
</DataGrid>

Binding怎么写呢?

xml结构如下
<root>
<a>aa</a>
<b>bb</b>
<c>cc</c>
<root>
想让a,b,c做列名
anbin0814 2011-07-01
  • 打赏
  • 举报
回复
用程序把xml读取出来,然后再绑定啊。

解决办法

DataGridColumnHeader header=new DataGridColumnHeader();
if(e.MouseDevice.DirectlyOver.GetType().Equals(header.GetType()))
{
return;
}
Jane_sl 2011-07-01
  • 打赏
  • 举报
回复
刚开始学习WPF,也帮不上忙,楼主知道怎样用DataGrid绑定xml吗?老板要求用xml代替数据库进行显示、存储和修改.你的DataGrid绑定的是数据库还是xml?
无趣 2011-07-01
  • 打赏
  • 举报
回复
在双击事件处理程序中判断是否列头,如果是列头,直接return掉就ok了。
在Windows系统中,notepad.exe(记事本)是一个“经典的”、“简洁的”文本编辑器。这个软件,没有华丽的外观,也没有繁杂的功能,仅仅是一个文本编辑小软件。虽然经过Windows系统数十年的变换,但它却保持着永恒姿态,数十年来几乎不曾改变过。曾经,VS中的经典DEMO中,就有它的身影,一个新建的项目,就藏有一个新建的“记事本”。然而,在WPF的项目中,“记事本”却消失的无影无踪,也许是很容易实现,也许是为了革新,而不愿再传承“经典”。确实,使用WPF技术再次让“记事本”复活,确实也是一件非常容易的事情。但是,如果,使用WPF技术,再搭配当下非常流行的MVVM模式呢?复活“记事本”的难度却陡然上升至很多WPF程序员为之默默叹气。而,MVVM模式是掌握WPF的最顶级技术,MVVM模式拥有的无尽的优势,让WPF相对于过往的编程模式来说,是一种革命性的创新,从而也成为大中型WPF项目中必须的模式。但,学习难度。。。。。。在这个《WPF记事本开发详解》的课程中,赵老师带领你在WPF中,从零开始一步步构建MVVM模式,直到让你亲自以WPF+MVVM的方式,让这个经典的“记事本”软件从你的手中“复活”。在课程中,赵老师会详细讲解WPF和MVVM中的各种技巧,让你从此爱上WPF+MVVM编程。

8,736

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧