Silverlight 2.0 中 DataGrid得到模板列中的按鈕,並得到所點擊的行號和鍵值

通過Tag屬性可以設置自定義的數據,使用GetCellContent方法可以到單元格內的控件,所以就可以得到你點擊的是哪一行了。點擊的操作就很容易了。

下面的是全部的源代碼

Page,xaml

  1. <UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
  2.     x:Class="DataGridSnippets.Page"
  3.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  4.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
  5.     Width="600" Height="Auto">
  6.   <ScrollViewer VerticalScrollBarVisibility="Auto" BorderThickness="0">
  7.     <StackPanel Margin="10,10,10,10">     
  8.       <data:DataGrid x:Name="dataGrid1" 
  9.       Height="200" Margin="0,5,0,10"
  10.       AutoGenerateColumns="False" LoadingRow="dataGrid1_LoadingRow">
  11.         <data:DataGrid.Columns>
  12.           <data:DataGridTextColumn  Header="序號" Width="120"  Binding="{Binding IndexName}" />
  13.           <data:DataGridTextColumn  Header="姓名" Width="120"  Binding="{Binding UserName}" />
  14.           <data:DataGridTextColumn  Header="地址" Width="120"  Binding="{Binding Address}" />
  15.           <data:DataGridTemplateColumn Header="功能按鈕"  Width="80">
  16.             <data:DataGridTemplateColumn.CellTemplate>
  17.               <DataTemplate>
  18.                 <StackPanel Orientation="Horizontal">
  19.                   <Button Content="初始化內容" x:Name="Button1" Click="Button1_Click"  Tag=""></Button>
  20.                 </StackPanel>
  21.               </DataTemplate>
  22.             </data:DataGridTemplateColumn.CellTemplate>
  23.           </data:DataGridTemplateColumn>
  24.         </data:DataGrid.Columns>
  25.       </data:DataGrid>
  26.       <TextBlock x:Name="msg"></TextBlock>
  27.     </StackPanel>
  28.   </ScrollViewer>
  29. </UserControl>
Page.xaml.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Windows;
  4. using System.Windows.Controls;
  5. namespace DataGridSnippets
  6. {
  7.   public partial class Page : UserControl
  8.   {
  9.     public Page()
  10.     {
  11.       InitializeComponent();
  12.       //綁定數據
  13.       dataGrid1.ItemsSource = Customer.GetSampleCustomerList();
  14.     }
  15.     private void dataGrid1_LoadingRow(object sender, DataGridRowEventArgs e)
  16.     {      
  17.        Customer bindData = (Customer)e.Row.DataContext;
  18.        Button btn = dataGrid1.Columns[3].GetCellContent(e.Row).FindName("Button1"as Button;
  19.        btn.Content = bindData.UserName;
  20.        btn.Tag = bindData.IndexName + "," + e.Row.GetIndex();
  21.     }
  22.     private void Button1_Click(object sender, RoutedEventArgs e)
  23.     {     
  24.       Button b = sender as Button;
  25.       string[] t = b.Tag.ToString().Split(',');
  26.       msg.Text = "你選擇的值是:" + t[0] + " 是 DataGrid 的第 " + t[1] + " 行";
  27.     }
  28.   }
  29.   /// <summary>
  30.   /// 數據對象
  31.   /// </summary>
  32.   public class Customer
  33.   {
  34.     public Int32 IndexName { getset; }
  35.     public String UserName { getset; }
  36.     public String Address { getset; }
  37.     public Customer(Int32 indexName, String userName, String address)
  38.     {
  39.       this.IndexName = indexName;
  40.       this.UserName = userName;
  41.       this.Address = address;
  42.     }
  43.     public static List<Customer> GetSampleCustomerList()
  44.     {
  45.       //示例數據
  46.       List<Customer> data = new List<Customer>();
  47.       for(int i = 0;i<10;i++)
  48.       {
  49.         data.Add(new Customer(i*i, "孟憲會之" + i.ToString(), "地址之" + i.ToString()));
  50.       }    
  51.       return data;
  52.     }
  53.   }
  54. }

本文基於Silverlight 2.0正式版。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章