您的位置:首页 > 其它

WPF中为ListView动态绑定数据且添加一列复选框

2011-09-15 20:06 561 查看
GetGridViewByFieldManage(ResourceDictionary resources, string moduleName, int groupID)
{
GridView gv = new GridView();
DataTable dt = fieldManageBLL.GetFieldManage(moduleName);
for(int i=0;i<dt.Rows.Count;i++)
{
if(i==0)
{
GridViewColumn gvc=new GridViewColumn();
CheckBox cb = new CheckBox();
cb.Checked += new RoutedEventHandler(cb_Checked);
cb.Unchecked += new RoutedEventHandler(cb_Unchecked);
TextBlock tb = new TextBlock();
tb.Text = "全选";
cb.Content = tb;
_gvc.Header = cb;
_gvc.Width = 100;
_gvc.CellTemplate = (DataTemplate)resources["TheCheckBox"];
gv.Columns.Add(_gvc);
continue;
}
gvc.DisplayMemberBinding = new Binding(dt.Rows[i]["FieldManage_Field"].ToString());
}
return gv;
}

//其中:dt.Rows[i]["FieldManage_Field"].ToString();分别对应以下DataTemplate中的x:Key的值。
//至于DisplayMemberBinding我才接触几天,目前的理解是只显示数据没有其它效果;而CellTemplate则可以在显示的数据上加上控件的效果,比如CheckBox、Hyperlink等

//XAML代码:
<Window.Resources>
<!-- 复选框 -->
<DataTemplate x:Key="TheCheckBox">
<TextBlock VerticalAlignment="Center">
<CheckBox Name="ckb_SelectAll" Click="ckb_SelectAll_Click" Margin="6 0 0 0">
<!--<TextBlock  Foreground="White">全选</TextBlock>-->
</CheckBox>
</TextBlock>
</DataTemplate>
<!-- 序号 -->
<DataTemplate x:Key="TheIndex">
<TextBlock Width="100" Text="{Binding Path=TheIndex}" Style="{StaticResource NormalTextBlockStyle}" TextAlignment="Center"></TextBlock>
</DataTemplate>
<!--单据号-->
<DataTemplate x:Key="StoBill_No">
<TextBlock Width="150" Text="{Binding Path=StoBill_No}" Tag="{Binding Path=StoBill_ID}" Style="{StaticResource NormalTextBlockStyle}" TextAlignment="Right" Padding="0,0,20,0"></TextBlock>
</DataTemplate>
<!--单据类型-->
<DataTemplate x:Key="StoBillsType_Name">
<TextBlock Width="100" Text="{Binding Path=StoBillsType_Name }" Style="{StaticResource NormalTextBlockStyle}" TextAlignment="Center"></TextBlock>
</DataTemplate>
<!--时间-->
<DataTemplate x:Key="StoBill_OperationDate">
<TextBlock Width="150" Text="{Binding Path=StoBill_OperationDate,StringFormat='{}{0:yyyy-MM-dd HH:mm}'}" Style="{StaticResource NormalTextBlockStyle}" TextAlignment="Left"></TextBlock>
</DataTemplate>
<!--应付-->
<DataTemplate x:Key="StoBill_NotPaid">
<TextBlock Width="100" Text="{Binding Path=StoBill_NotPaid,StringFormat='N'}" Style="{StaticResource NormalTextBlockStyle}" TextAlignment="Right" Padding="0,0,20,0"></TextBlock>
</DataTemplate>
<!--单据明细-->
<DataTemplate x:Key="DanjuDetail">
<TextBlock  TextAlignment="Center" Width="100" >
<Hyperlink Name="hpl_DanjuDetailListView" Tag="{Binding StoBill_ID}" Click="hpl_DanjuDetailListView_Click">
<TextBlock x:Name="tbl_DanjuDetail" Text="单据明细" />
</Hyperlink>
</TextBlock>
</DataTemplate>
<!--结算明细-->
<DataTemplate x:Key="JieSuanDetail">
<TextBlock  TextAlignment="Center" Width="100" >
<Hyperlink Name="hpl_JieSuanDetailListView" Tag="{Binding StoBill_ID}" Click="hpl_JieSuanDetailListView_Click">
<TextBlock x:Name="tbl_DanjuDetail" Text="结算明细" />
</Hyperlink>
</TextBlock>
</DataTemplate>
</Window.Resources>

此ListView的ItemsSource就是一个DataTable,不过填充过DataTable后要在此DataTable中再添加一列DataColumn,如下:

SupplierDt.Columns.Add(new DataColumn("TheCheckBox",typeof(CheckBox)));
这样动态绑定代码就出来了(假设上面的方法签名为:GetGridViewByFieldManage(ResourceDictionary resources, string moduleName, int groupID)):如下:

GridView gv = GetGridViewByFieldManage(this.Resources, "供应商清账", MainRoomModel.StaffRightGroupID);
Ltv_ClearignAccount.View = gv;
Ltv_ClearignAccount.ItemsSource = dt.DefaultView;
其实这个方法的三个参数只用到了第一个参数,后面两个都是根据实际应用添加的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: