Передача данных в соответствующие текстовые поля из DataGrid после нажатия определенной строки в Datagrid - PullRequest
0 голосов
/ 17 января 2019

Я к новому WPF. Мне нужно передать данные из DataGrid в текстовые поля. Я искал много сайтов, но все объясняли, рассматривая DataGridview (который имеет событие CellContentClick), но этого события нет в DataGrid (я использую vs2010).

Я определил текстовые поля в Usercontrol и использовал их в главном окне для 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. Просмотр модели

    public CustoDataPassVM () { FillGrid (); } public void FillGrid () { PurchaseNowEntities Entity = new PurchaseNowEntities (); var datalist = from r в 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 я могу получить данные в сетке данных

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

Вывод скриншотов фото

Если я буду использовать и текстовое поле, и сетку данных в одном и том же окне, я смогу получить данные о текстовых полях с помощью

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

Но когда я разделяю сетку данных в главном окне и текстовых полях в Usercontrol. Я думаю, что он не находит сетку данных ElementName = DGdata в окне usercontrol, поэтому он не является обязательным в texbox, я думаю.

Как передать данные таблицы данных (выбранной строки) из главного окна в текстовые поля управления пользователем

И я попытался с обработчиком 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;

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...