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>


...全文
295 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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了。

8,756

社区成员

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

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