将文本框中的数据绑定到数据网格

问题描述:

我正在制作联系人信息程序,用户可以在其中输入姓名,年龄和生日以及其他一些内容到文本框中。当您点击确定时,我想要将数据放入DataGrid将文本框中的数据绑定到数据网格

首先,我有我的MainWindow,这将打开一个名为CreateContact当你按下新建联系人按钮,新的窗口:

CreateContact cc = new CreateContact(); 
cc.ShowDialog(); 

然后打开一个新窗口,在这里键入您的姓名和年龄,并选择生日。然后单击OK:

private void cmdOk_Click(object sender, RoutedEventArgs e) 
{ 
    MainWindow m = new MainWindow(); 
    m.name = txtName.Text; 
    m.age = txtAge.Text; 
    m.birthDate = dpBirthdate.Text; 
    m.ShowContacts() 
} 

应该在我的MainWindow运行我的方法ShowContacts

public string name; 
public string age; 
public string birthDate; 

public void ShowContacts() 
{ 
    try 
    { 
     dgContacts.ItemsSource = LoadContactData(); 
    } 
    catch (Exception e) 
    { 
     MessageBox.Show("" + e); 
    } 
} 

private List<ContactData> LoadContactData() 
{ 
    List<ContactData> list = new List<ContactData>(); 
    list.Add(new ContactData() 
    { 
     Name = name, 
     Age = age, 
     BirthDate = birthDate 
    });    
    return list; 
} 


public class ContactData 
{ 
    public string Name { get; set; } 
    public string Age { get; set; } 
    public string BirthDate { get; set; } 
} 

但什么也没有发生,我得到的DataGrid没有数据。我希望有人能告诉我什么是错的。我真的试过很多搜索是什么导致DataGrid显示没有数据。

+0

我不明白你什么时候坚持联系信息,以及如何检索它? – diogod 2013-05-11 11:48:04

+0

请解释你如何检索数据? – 2013-05-11 11:54:01

+0

请发布您的XAML代码 – Venson 2013-05-11 11:55:02

假设dgContacts在数据网格视图控件,你必须调用以下命令,以确保数据被绑定

dgContacts.DataBind();

该过程类似于解释here的过程。

如果您已经调试了代码,并且此建议不起作用,请调试并发布是否绑定到控件的数据。

简短回答:看起来您在更改ShowContacts中的ItemsSource时不会触发PropertyChanged事件。

长的答案:你应该真的看着MVVM。你应该创建保持联络资料列表的视图模型,并绑定到你的XAML列表(也进行数据绑定您的联系人对话框的联系数据对象):

var contact = new ContactData(); 
var cc = new CreateContact { Datacontext = contact }; 
cc.ShowDialog(); 

// ok button has been hit at this point, 
// you can check for cancel if you want 
(List<ContactData>)(dgContacts.ItemsSource).Add(contact); 

// may still need to fire PropertyChanged here depending on binding 

好了,这是所有的XAML和类我在程序中使用。我真的希望有人能够帮助分辨出什么是错误的,为什么它不会在数据网格中显示任何数据。

MainWindow.xaml:

<Window x:Class="KontaktInfo.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <DataGrid AutoGenerateColumns="True" Name="dgContacts" HorizontalAlignment="Left" Margin="0,95,0,0" VerticalAlignment="Top" Height="225" Width="517"/> 

    <Button x:Name="cmdCreateContact" Content="Opret Kontakt" HorizontalAlignment="Left" Margin="0,68,0,0" VerticalAlignment="Top" Width="80" Click="cmdCreateContact_Click"/> 
    <Button x:Name="cmdDeleteContact" Content="Slet Kontakt" HorizontalAlignment="Left" Margin="85,68,0,0" VerticalAlignment="Top" Width="80"/> 

</Grid> 

MainWindow.cs:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 

using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 

namespace KontaktInfo 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public string name; 
     public string age; 
     public string birthDate; 

     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void cmdCreateContact_Click(object sender, RoutedEventArgs e) 
     { 
      CreateContact cc = new CreateContact(); 
      cc.ShowDialog(); 
     } 

     public void ShowContacts() 
     { 
      try 
      { 
       dgContacts.ItemsSource = LoadContactData(); 
      } 
      catch (Exception e) 
      { 
       MessageBox.Show("" + e); 
      } 
     } 

     private List<ContactData> LoadContactData() 
     { 
      List<ContactData> list = new List<ContactData>(); 
      list.Add(new ContactData() 
      { 
       Name = name, 
       Age = age, 
       BirthDate = birthDate 
      }); 

      return list; 
     } 

    } 

public class ContactData 
    { 
     public string Name { get; set; } 
     public string Age { get; set; } 
     public string BirthDate { get; set; } 
    } 
} 

CreateContact.xaml:

 <Window x:Class="KontaktInfo.CreateContact" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="CreateContact" Height="403" Width="300"> 
    <Grid> 
     <Label Content="Navn" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top"/> 
     <TextBox x:Name="txtName" HorizontalAlignment="Left" Height="23" Margin="10,36,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="272"/> 
     <Label Content="Alder" HorizontalAlignment="Left" Margin="10,64,0,0" VerticalAlignment="Top"/> 
     <TextBox x:Name="txtAge" HorizontalAlignment="Left" Height="23" Margin="10,90,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="272"/> 
     <Label Content="Fødselsdag" HorizontalAlignment="Left" Margin="10,118,0,0" VerticalAlignment="Top"/> 
     <Button Name="cmdOk" Content="OK" HorizontalAlignment="Left" Margin="127,341,0,0" VerticalAlignment="Top" Width="75" Click="cmdOk_Click"/> 
     <Button Name="cmdCancel" Content="Annuller" HorizontalAlignment="Left" Margin="207,341,0,0" VerticalAlignment="Top" Width="75"/> 
     <DatePicker Name="dpBirthdate" HorizontalAlignment="Left" Margin="10,144,0,0" VerticalAlignment="Top"/> 

    </Grid> 
</Window> 

CreateContact.cs:

 using System; 
    using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Shapes; 

namespace KontaktInfo 
{ 
    /// <summary> 
    /// Interaction logic for CreateContact.xaml 
    /// </summary> 
    public partial class CreateContact : Window 
    { 
     public CreateContact() 
     { 
      InitializeComponent(); 
     } 

     private void cmdOk_Click(object sender, RoutedEventArgs e) 
     { 
      MainWindow m = new MainWindow(); 
      m.name = txtName.Text; 
      m.age = txtAge.Text; 
      m.birthDate = dpBirthdate.Text; 
      m.ShowContacts(); 



     } 
    } 
}