2013-10-18 32 views
0

我有DataGrid包含一些Items.When我在Datagrid中選擇項目時,它應該顯示在我的窗口中的3個文本框中。請幫助我使用.cs代碼。我是新來WPF使用Visual Studio 2012的WPF中的DataGrid示例C#

這是我的XAML代碼

<Window x:Class="simpledatagrid.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="IDDATA" Height="350" Width="525"> 
<Grid> 
    <DataGrid Name="dgsample" BorderBrush="Black" BorderThickness="2" AutoGenerateColumns="True" CanUserAddRows="True" CanUserDeleteRows="True" Margin="200,10,10,75"/> 

    <Label Content="ID :" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="26" Width="27"/> 
    <Label Content="Name :" HorizontalAlignment="Left" Margin="10,60,0,0" VerticalAlignment="Top" Height="26" Width="48"/> 
    <Label Content="Salary :" HorizontalAlignment="Left" Margin="10,110,0,0" VerticalAlignment="Top" Height="26" Width="47"/> 

    <TextBox Name="tb1" HorizontalAlignment="Left" Height="20" Margin="60,10,0,0" TextWrapping="NoWrap" Text="" VerticalAlignment="Top" Width="100" /> 
    <TextBox Name="tb2" HorizontalAlignment="Left" Height="20" Margin="60,60,0,0" TextWrapping="NoWrap" Text="" VerticalAlignment="Top" Width="100"/> 
    <TextBox Name="tb3" HorizontalAlignment="Left" Height="20" Margin="60,110,0,0" TextWrapping="NoWrap" Text="" VerticalAlignment="Top" Width="100"/> 

    <Button Content="Get" HorizontalAlignment="Left" Margin="10,190,0,0" VerticalAlignment="Top" Width="75" Click="Get_Click" /> 
    <Button Content="Add" HorizontalAlignment="Left" Margin="10,230,0,0" VerticalAlignment="Top" Width="75" Click="Add_Click" /> 
    <Button Content="Delete" HorizontalAlignment="Left" Margin="10,270,0,0" VerticalAlignment="Top" Width="75" Click="Delete_Click" /> 
</Grid> 

這是我的.cs代碼

public partial class MainWindow : Window 
{ 
    ObservableCollection<User> Users = new ObservableCollection<User>(); 
    public MainWindow() 
    { 
     InitializeComponent(); 
    Users.Add(new User() { Id = 101, Name = "Allen", Salary = 10 }); 
    Users.Add(new User() { Id = 102, Name = "king", Salary = 20 }); 
    Users.Add(new User() { Id = 103, Name = "scot", Salary = 30 }); 
    Users.Add(new User() { Id = 104, Name = "havy", Salary = 40 }); 
    Users.Add(new User() { Id = 105, Name = "xen", Salary = 50 }); 
    Users.Add(new User() { Id = 106, Name = "len", Salary = 60 }); 

    dgsample.ItemsSource = Users; 
    } 

private void Get_Click(object sender, RoutedEventArgs e) 
{    
    { 

     User currentUser = Users.Single(select => select.Id == int.Parse(this.tb1.Text)); 
     this.tb2.Text = currentUser.Name; 
     this.tb3.Text = currentUser.Salary.ToString(); 

    } 
} 

private void Add_Click(object sender, RoutedEventArgs e) 
{ 
    Users.Add(new User() { Id = int.Parse(tb1.Text), Name = tb2.Text, Salary = int.Parse(tb3.Text) }); 
} 
private void Delete_Click(object sender, RoutedEventArgs e) 
{ 
    Users.RemoveAt(dgsample.SelectedIndex);      
} 
} 

回答

1

在構造函數SelectionChanged事件到您的DataGrid中添加InitializeComponents後:

dgsample.SelectionChanged += Grid_SelectionChanged; 

,並添加以下代碼:

private void Grid_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    int index = dgsample.SelectedIndex; 

    tb1.Text = users[index].Id.ToString(); 
    tb2.Text = users[index].Name; 
    tb3.Text = users[index].Salary.ToString(); 
} 

* UPDATE *我知道這是不相關的問題,但在作者詢問我

這裏是你的添加方法:

private void BtnAdd_Click(object sender, RoutedEventArgs e) 
{ 

    if (!tb1.Text.Equals("")) //checks if tb1 is not empy 
    { 
     var query1 = users.Where(User => User.Id == int.Parse(tb1.Text)); //creates a variable query1 with all users who have same ID as the one in tb1, I do this to block the same ID insertion 

     if (!query1.Any()) //if the query1 is empty, meaning there are no users with given id 
     { 
      users.Add(new User() { Id = int.Parse(tb1.Text), Name = tb2.Text, Salary = int.Parse(tb3.Text) }); // adds new user to the list 
     } 
    } 

} 
+0

我想更好地利用綁定 – progpow

+0

@ user2889489當然,我已經對你有答案,但不能把它放在註釋:/ – Tafari

+0

回答更新。 – Tafari

2

可以使這種結合:

<TextBox Text="{Binding SelectedItem.Name, ElementName=dgsample}"/> 

模擬eny屬性:Id,薪水。

1

更簡單的方式做到這一點...

<TextBox **Text="{Binding SelectedItem.Id, ElementName=dgsample}"** Name="tb1" HorizontalAlignment="Left" Height="20" Margin="60,10,0,0" TextWrapping="NoWrap" VerticalAlignment="Top" Width="100" /> 
    <TextBox **Text="{Binding SelectedItem.Name, ElementName=dgsample}"** Name="tb2" HorizontalAlignment="Left" Height="20" Margin="60,60,0,0" TextWrapping="NoWrap" VerticalAlignment="Top" Width="100"/> 
    <TextBox **Text="{Binding SelectedItem.Salary, ElementName=dgsample}"** Name="tb3"   HorizontalAlignment="Left" Height="20" Margin="60,110,0,0" TextWrapping="NoWrap" VerticalAlignment="Top" Width="100"/> 
相關問題