首页 > 解决方案 > 单击 Datagrid 中的特定行后,将数据从 DataGrid 传递到相应的文本框

问题描述

我要新的WPF。我需要将数据从 DataGrid 传递到文本框。我搜索了许多网站,但所有网站都在通过考虑 DataGridview(它有名为 CellContentClick 的事件)进行解释,但 DataGrid 中不存在该事件(我使用的是 vs2010)。

我在用户控件中定义了文本框,并在主窗口中使用了 4 个选项卡。

1.MainWindow.xaml代码

<Grid>
    <TabControl x:Name="TabControl1">
        <TabItem Header="View Details" x:Name="Tab1">
            <StackPanel>
                <uc:CustomerUC x:Name="ViewData"></uc:CustomerUC>
                <Button Content="UpdateDataGrid" Height="25" Width="180" Name="UpGridBtn" Click="UpGridBtn_Click" Margin="15" Visibility="{Binding UpGridVisibility}"/>
                <DataGrid AutoGenerateColumns="False" CanUserAddRows="False" ItemsSource="{Binding CustomersData}" x:Name="DGdata"  Margin="0 20 0 10">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="CustomerID" Binding="{Binding Path=CustoID}" IsReadOnly="True" />
                        <DataGridTextColumn Header="CustomerName" Binding="{Binding Path=CustoName}" IsReadOnly="True"/>
                        <DataGridTextColumn Header="CustomerAge" Binding="{Binding Path=CustoAge}" IsReadOnly="True"/>
                        <DataGridTextColumn Header="CustomerAddress" Binding="{Binding Path=CustoAddress}" IsReadOnly="True"/>
                        <DataGridTextColumn Header="CustomerEmail" Binding="{Binding Path=CustoEmail}" IsReadOnly="True" />
                        <DataGridTextColumn Header="CustomerMobile" Binding="{Binding Path=CustoMobile}" IsReadOnly="True"/>
                        <DataGridTextColumn Header="CustomerUserName" Binding="{Binding Path=CustoUname}" IsReadOnly="True"/>
                    </DataGrid.Columns>
                </DataGrid>

            </StackPanel>
        </TabItem>
        <TabItem Header="Add Details" x:Name="Tab2">
            <uc:CustomerUC x:Name="AddData"></uc:CustomerUC>
        </TabItem>
        <TabItem Header="Update Details" x:Name="Tab3">
            <uc:CustomerUC x:Name="UpdateData"></uc:CustomerUC>
        </TabItem>
        <TabItem Header="Delete Details" x:Name="Tab4">
            <uc:CustomerUC x:Name="DeleteData"></uc:CustomerUC>
        </TabItem>
    </TabControl>
</Grid>

2.用户控制代码

<StackPanel >
    <StackPanel Orientation="Horizontal" Visibility="{Binding CustIDVisibility}" >
        <Button x:Name="CustID" Content="Customer ID" Width="100" Margin="82 0 0 0" Click="CustID_Click"  />
        <ComboBox Height="25" Width="180" x:Name="ComboID" SelectionChanged="ComboID_SelectionChanged" />
    </StackPanel>
    <StackPanel Orientation="Horizontal" Visibility="{Binding CustomerIDVisibility}" >
        <Label x:Name="CustoID" Content="Customer ID" Width="100"  Margin="82 0 0 0"/>
        <TextBox x:Name="BoxID" Margin="2" Width="180" Text="{Binding ElementName=DGdata, Path=SelectedItem.CustoID}"/>
    </StackPanel>
    <StackPanel Orientation="Horizontal" >
        <Label x:Name="CustName" Content="Customer Name" Width="100"  Margin="82 0 0 0"/>
        <TextBox x:Name="BoxName" Margin="2" Width="180" Text="{Binding ElementName=DGdata, Path=SelectedItem.CustoName}"/>
    </StackPanel>
    <StackPanel Orientation="Horizontal">
        <Label  x:Name="CustAge" Content=" Age" Width="100" Margin="82 0 0 0"/>
        <TextBox  x:Name="BoxAge" Margin="2" Width="180" Text="{Binding ElementName=DGdata, Path=SelectedItem.CustoAge}"/>
    </StackPanel>
    <StackPanel Orientation="Horizontal" >
        <Label x:Name="CustAddress" Content="Address" Width="100" Margin="82 0 0 0"/>
        <TextBox x:Name="BoxAddress" Margin="2" Width="180" Text="{Binding ElementName=DGdata, Path=SelectedItem.CustoAddress}"/>
    </StackPanel>
    <StackPanel Orientation="Horizontal" >
        <Label x:Name="CustEmail" Content="Email ID" Width="100" Margin="82 0 0 0"/>
        <TextBox x:Name="BoxEmail" Margin="2" Width="180" Text="{Binding ElementName=DGdata, Path=SelectedItem.CustoEmail}"/>
    </StackPanel>
    <StackPanel Orientation="Horizontal" >
        <Label x:Name="CustMobile" Content="Mobile No." Width="100" Margin="82 0 0 0" />
        <TextBox x:Name="BoxMobile" Margin="2" Width="180" Text="{Binding ElementName=DGdata, Path=SelectedItem.CustoMobile}"/>
    </StackPanel>
    <StackPanel Orientation="Horizontal" >
        <Label x:Name="CustUname" Content="User Name"  Width="100" Margin="82 0 0 0"/>
        <TextBox x:Name="BoxUname" Margin="2" Width="180" Text="{Binding ElementName=DGdata, Path=SelectedItem.CustoUname}"/>
    </StackPanel>
    <StackPanel Orientation="Horizontal" Visibility="{Binding pwdVisibility}" >
        <Label x:Name="CustPWD" Content="Password" Width="100" Margin="82 0 0 0"/>
        <TextBox x:Name="BoxPWD" Margin="2" Width="180" />
    </StackPanel>

    <StackPanel Orientation="Horizontal" Margin="82 15 0 0" >
        <Button x:Name="CancelBtn" Content="Cancel" Width="100" Height="25" Margin="2"/>
        <Button x:Name="SaveBtn"  Content="Save" Width="100" Height="25" Margin="2" Visibility="{Binding SaveVisibility}" Click="SaveBtn_Click" />
        <Button x:Name="UpdateBtn" Content="Update" Width="100" Height="25" Margin="2" Visibility="{Binding UpdateVisibility}" Click="UpdateBtn_Click" />
        <Button x:Name="DeleteBtn" Content="Delete" Width="100" Height="25" Margin="2" Visibility="{Binding DeleteVisibility}" Click="DeleteBtn_Click" />
    </StackPanel>


</StackPanel>

//

3.型号代码

 class CustomerDataModel
{
    public int CustoID { get; set; }
    public string CustoName { get; set; }
    public int CustoAge { get; set; }
    public string CustoAddress { get; set; }
    public string CustoEmail { get; set; }
    public string CustoMobile { get; set; }
    public string CustoUname { get; set; }
}

//

  1. 查看型号代码

    公共 CustoDataPassVM() { FillGrid(); } 公共无效 FillGrid() { PurchaseNowEntities 实体 = 新 PurchaseNowEntities(); var datalist = from r in Entity.tblCustomerDetails select r;

        if (CustomersData == null)
            CustomersData = new ObservableCollection<CustomerDataModel>();
    
        foreach (var r in datalist)
        {
            CustomersData.Add(new CustomerDataModel
            {
                CustoID = r.CustomerID,
                CustoName = r.CustomerName,
                CustoAge = r.CustomerAge,
                CustoAddress = r.CustomerAddress,
                CustoEmail = r.CustomerEmailID,
                CustoMobile = r.CustomerMobile,
                CustoUname = r.CustomerUname
            });
        }
    }
    

5.在datacontext的帮助下,我可以在datagrid中获取数据

 public MainWindow()
    {
        InitializeComponent();
        CO = new CustoDataPassVM();
        DGdata.DataContext = CO;
    }

输出截图图片

如果我在同一个窗口中同时使用文本框和数据网格,我将能够在文本框的帮助下获取数据

Text="{Binding ElementName=DGdata, Path=SelectedItem.CustoID}

但是当我将主窗口中的数据网格和用户控件中的文本框分开时。我认为它没有在用户控件窗口中找到 ElementName= DGdata 的数据网格,所以我认为它没有绑定在 texboxes 中。

那么如何将数据网格(选定行)的数据从主窗口传递到用户控件文本框

我尝试使用 SelectionChanged 处理程序,在此我要获取每个单元格值,但它没有绑定到文本框(例如:BoxName.text 被分配但不在它的文本框中..

SelectionChanged 处理程序代码:

public void DGdata_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        CustomerUC bindnow = new CustomerUC();
        CustomerDataModel row = (CustomerDataModel)DGdata.SelectedItem;
        bindnow.BoxName.Text = row.CustoName;

    }

标签: wpfmvvmdatagrid

解决方案


推荐阅读