简体   繁体   English

使用Visual Studio 2012 C#的WPF中的DataGrid示例

[英]DataGrid sample in WPF using visual studio 2012 C#

I have DataGrid containing some Items.When i select the Item in the Datagrid it should show in the 3 TextBoxes that i have in my window.Please help me with the .cs code .i'm new to WPF 我有包含一些项目的DataGrid。当我在Datagrid中选择项目时,它应该显示在我在窗口中的3个文本框中。请使用.cs代码帮助我.WPF的新手

This is my XAML Code 这是我的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>

this is my .cs code 这是我的.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);                       
}
}

You can make this binding: 您可以进行以下绑定:

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

And analog for eny property:Id, Salary. 对eny属性的模拟为:Id,薪水。

Add SelectionChanged event to your datagrid in your constructor after InitializeComponents: 在InitializeComponents之后,将SelectionChanged事件添加到构造函数中的数据网格中:

dgsample.SelectionChanged += Grid_SelectionChanged;

and add this code: 并添加以下代码:

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 * I know it's not related to the question but the author asked me for it *更新*我知道这与问题无关,但作者要求我这样做

Here is your add method: 这是您的添加方法:

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
        }
    }

}

Easier Way to Do this... 更简单的方法

    <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"/>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM