2016-01-30 39 views
2

我有一个wpf表单,其中一个DataGrid,另一个wpf表单的形式为TextBoxes将DataGrid的行传递给另一个wpf表单c#

我想将选定行的每个单元格的每个值传递给另一个表单,但我不知道如何使用wpf来执行此操作。

在wpf Form2中,我想将这些值放入TextBox进行编辑,然后更新Form1的行以及连接的DataSet

如何解决这个问题?

感谢

+0

数据模型的外观如何? DataGrid的数据源是什么样的? – AnjumSKhan

回答

2

它看起来像您使用的是DataSetDataGrid

  1. 获取使用Binding所选择的行(SelectedItem)。

  2. 将此ChosenItem作为ref发送给其他窗体/窗口。

  3. 设置此发送ChosenItem作为表格网格的DataContext

现在,当您更改Form2中的值时,更改将反映回form1。

例如代码,

Form1中

<Grid> 
     <DataGrid x:Name="Dgrid" HorizontalAlignment="Left" Margin="10,31,0,0" VerticalAlignment="Top" SelectedItem="{Binding ChosenItem}" />    
     <Button Content="Edit" HorizontalAlignment="Left" Margin="10,4,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_1"/> 
    </Grid> 

Form1中的代码隐藏

public partial class MainWindow : Window 
{ 
    DataStore ds = new DataStore(); 

    public MainWindow() 
    { 
     InitializeComponent(); 

     Dgrid.DataContext = ds; 
     Dgrid.ItemsSource = ds.DataSource.Tables[0].DefaultView; 
    } 

    private void Button_Click_1(object sender, RoutedEventArgs e) 
    { 
     DataRowView item = ds.ChosenItem; 
     Window1 w = new Window1(ref item); // send selected row as ref to other form 
     w.Show(); 
    } 
} 

    public class DataStore 
    { 
     public DataRowView ChosenItem { get; set; } 

     public DataStore() 
     { 
      DataTable table1 = new DataTable(); 
      table1.Columns.Add(new DataColumn("Name", typeof(string))); 
      table1.Columns.Add(new DataColumn("Address", typeof(string))); 

      DataRow row = table1.NewRow(); 
      row["Name"] = "Name1"; 
      row["Address"] = "203 A"; 
      table1.Rows.Add(row); 

      row = table1.NewRow(); 
      row["Name"] = "Deepak"; 
      row["Address"] = "BHEL Bhopal"; 
      table1.Rows.Add(row); 

      ds.Tables.Add(table1); 
     } 

     DataSet ds = new DataSet(); 
     public DataSet DataSource { get { return ds; } } 
    } 

窗体2

 <Grid x:Name="FormGrid" DataContext="{Binding SelectedItem, ElementName=Dgrid}"> 
      <TextBox HorizontalAlignment="Left" Height="23" TextWrapping="Wrap" Text="{Binding Name}" VerticalAlignment="Top" Width="120"/> 
      <TextBox HorizontalAlignment="Left" Height="23" Margin="0,49,0,0" TextWrapping="Wrap" Text="{Binding Address}" VerticalAlignment="Top" Width="120"/> 
      <Button Content="Button" HorizontalAlignment="Left" Margin="0,100,0,0" VerticalAlignment="Top" Width="75"/> 
     </Grid> 

窗体2代码隐藏

public Window1(ref DataRowView item) 
{ 
    InitializeComponent(); 
    FormGrid.DataContext = item; 
} 
+0

非常感谢。现在它的作品! – LenJack

+1

在这种情况下,我怎么才能更新DataGrid只有当我点击更新按钮?因为现在如果我编辑Form2上的TexBoxes,Form1是自动更新。但我想等待点击更新按钮。 – LenJack

相关问题