wpf - 单击 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; }
}
//
查看型号代码
公共 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;
}
解决方案
推荐阅读
- ios - 设备解锁后在 iOS 上使用 PWA 进行意外缩放
- vba - 使 VBA 窗体出现在 windows 任务栏中
- javascript - 回调和异步
- amazon-web-services - 什么是 AWS Aurora Serverless 扩展时间?
- python - Firebase.post 在我的程序中不起作用
- node.js - Node.js:使用“>”标志生成回显进程
- r - 如何在 R 中自定义情节标题?
- java - 如何使用 mockito 抛出 HttpClientErrorException.Unauthorized 错误
- swift - (Swift) 如何找到调试控制台上显示的特定实例?
- excel - 使 VBA udf 与数组公式兼容