logo

Silverlight 2.0 中 DataGrid得到模板列中的按钮,并得到所点击的行号和键值
作者:孟宪会 发表于:2008-11-26 13:34:55

通过Tag属性可以设置自定义的数据,使用GetCellContent方法可以到单元格内的控件,所以就可以得到你点击的是哪一行了。点击的操作就很容易了。

下面的是全部的源代码

Page.xaml

<UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" x:Class="DataGridSnippets.Page" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="600" Height="Auto"> <ScrollViewer VerticalScrollBarVisibility="Auto" BorderThickness="0"> <StackPanel Margin="10,10,10,10"> <data:DataGrid x:Name="dataGrid1" Height="200" Margin="0,5,0,10" AutoGenerateColumns="False" LoadingRow="dataGrid1_LoadingRow"> <data:DataGrid.Columns> <data:DataGridTextColumn Header="序号" Width="120" Binding="{Binding IndexName}" /> <data:DataGridTextColumn Header="姓名" Width="120" Binding="{Binding UserName}" /> <data:DataGridTextColumn Header="地址" Width="120" Binding="{Binding Address}" /> <data:DataGridTemplateColumn Header="功能按钮" Width="80"> <data:DataGridTemplateColumn.CellTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <Button Content="初始化内容" x:Name="Button1" Click="Button1_Click" Tag=""></Button> </StackPanel> </DataTemplate> </data:DataGridTemplateColumn.CellTemplate> </data:DataGridTemplateColumn> </data:DataGrid.Columns> </data:DataGrid> <TextBlock x:Name="msg"></TextBlock> </StackPanel> </ScrollViewer> </UserControl>

Page.xaml.cs

using System; using System.Collections.Generic; using System.Windows; using System.Windows.Controls; namespace DataGridSnippets { public partial class Page : UserControl { public Page() { InitializeComponent(); //绑定数据 dataGrid1.ItemsSource = Customer.GetSampleCustomerList(); } private void dataGrid1_LoadingRow(object sender, DataGridRowEventArgs e) { Customer bindData = (Customer)e.Row.DataContext; Button btn = dataGrid1.Columns[3].GetCellContent(e.Row).FindName("Button1") as Button; btn.Content = bindData.UserName; btn.Tag = bindData.IndexName + "," + e.Row.GetIndex(); } private void Button1_Click(object sender, RoutedEventArgs e) { Button b = sender as Button; string[] t = b.Tag.ToString().Split(','); msg.Text = "你选择的值是:" + t[0] + " 是 DataGrid 的第 " + t[1] + " 行"; } } /// <summary> /// 数据对象 /// </summary> public class Customer { public Int32 IndexName { get; set; } public String UserName { get; set; } public String Address { get; set; } public Customer(Int32 indexName, String userName, String address) { this.IndexName = indexName; this.UserName = userName; this.Address = address; } public static List<Customer> GetSampleCustomerList() { //示例数据 List<Customer> data = new List<Customer>(); for(int i = 0;i<10;i++) { data.Add(new Customer(i*i, "孟宪会之" + i.ToString(), "地址之" + i.ToString())); } return data; } } }

本文基于Silverlight 2.0正式版。