DataGridView не мерцает подробную запись и игнорирует отношение внешнего ключа - PullRequest
0 голосов
/ 28 апреля 2011

У меня есть требование, в котором я показываю информацию Master-Detail в DataGridView.

Я добавил отношение внешних ключей к набору данных. Но Detail Grid не мигает сам по себе в зависимости от выбора мастера. Я не знаю, что мне здесь не хватает!

Просто чтобы проверить, существуют ли отношения, я проверил их с помощью DataGrid. Я там наверху.

enter image description here

 namespace WindowsFormsApplication1
 {
  public partial class Form1 : Form
  {
      public Form1()
      {
        InitializeComponent();
      }


    DataSet CreateTableAndFill()
    {
        DataSet ds = new DataSet();
        DataTable Header = ds.Tables.Add("Header");
        DataTable Line = ds.Tables.Add("Line");
        DataColumn dataColumn =  Header.Columns.Add("ID", typeof(int));
        dataColumn.AutoIncrement = true;
        dataColumn.AutoIncrementSeed = 1;
        Header.Columns.Add("Name", typeof(string));
        Line.Columns.Add("ID", typeof(int));
        Line.Columns.Add("Phone", typeof(string));
        DataRelation dataRelation = new DataRelation("ID_FK", Header.Columns["ID"], Line.Columns["ID"]);
        ds.Relations.Add(dataRelation);
        Header.Rows.Add(null, "Huzaiafa");
        Header.Rows.Add(null, "Arthur");
        Line.Rows.Add(1, "4253068516");
        Line.Rows.Add(1, "4252746864");
        Line.Rows.Add(2, "5654034");
        Line.Rows.Add(2, "12563");
        return ds;
    }

    private void button1_Click(object sender, EventArgs e)
    {
       DataSet ds = CreateTableAndFill();
       dataGridView1.DataSource = ds;
       dataGridView2.DataSource = ds;
       dataGridView1.DataMember = "Header";
       dataGridView2.DataMember = "Line";

    }
}
}

Даже после применения перехода от msdn это не работает! Тот же результат.

    private void button1_Click(object sender, EventArgs e)
    {
       DataSet ds = CreateTableAndFill();

       BindingSource masterBindingSource = new BindingSource();
       BindingSource detailsBindingSource = new BindingSource();

       masterBindingSource.DataSource = ds;
       detailsBindingSource.DataSource = masterBindingSource.DataSource;
       masterBindingSource.DataMember = "Header";
       detailsBindingSource.DataMember = "Line";  

       dataGridView1.DataSource = masterBindingSource;
       dataGridView2.DataSource = detailsBindingSource;


    }

Ответы [ 2 ]

2 голосов
/ 28 апреля 2011

Вы получите большую часть статьи MSDN. Пошаговое руководство. Создание формы Master / Detail с использованием двух элементов управления Windows Forms DataGridView .

Это показывает в значительной степени, что вы пытаетесь сделать.

Вы увидите, что пример связывает DataSet с BindingSource, привязанным к главному DGV, а подробный DGV привязан к другому BindingSource, который сам найден для основного BindingSource. Вот так вы получите отношения мастер-детализация между DGV.

Обновление:
Это будет работать вместо вашего button1_Click:

private void button1_Click(object sender, EventArgs e) {
    BindingSource masterBindingSource = new BindingSource();
    BindingSource detailsBindingSource = new BindingSource();

    masterBindingSource.DataSource = CreateTableAndFill();
    masterBindingSource.DataMember = "Header";

    dataGridView1.DataSource = masterBindingSource;

    detailsBindingSource.DataSource = masterBindingSource;
    detailsBindingSource.DataMember = "ID_FK";

    dataGridView2.DataSource = detailsBindingSource;
}
2 голосов
/ 28 апреля 2011

Внести следующие изменения:

Header.Rows.Add(1, "Huzaiafa");        
Header.Rows.Add(2, "Arthur");

detailsBindingSource.DataSource = masterBindingSource;
detailsBindingSource.DataMember = "ID_FK"; 
...