none
Как связать две таблицы datatable которые хранятся в xml файлах RRS feed

  • Вопрос

  • Добрый вечер, у меня вопрос.

    У меня есть два файла 1.xml и 2.xml (т.е. две таблици datatable), мне необходимо их связать по ключевому полю. как это можно реализовать. Программа пишеться на c#.

    Прошу, вас натолкните на статью, или пимер как это реализовываеться. Спасибо.

    9 февраля 2012 г. 18:57

Ответы

  • > У меня есть два файла 1.xml и 2.xml (т.е. две таблици datatable), мне необходимо их связать по ключевому полю. как это можно реализовать.
     
     

    using System.Data;
    using System.IO;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication5
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                var ds1 = new DataSet();
                ds1.ReadXml(new StringReader(@"
                    <root>
                        <i2 id='0' p='0' />
                        <i2 id='1' p='0' />
                        <i2 id='2' p='1' />
                    </root>"));
                
                var ds2 = new DataSet();
                ds2.ReadXml(new StringReader(@"
                    <root>
                        <i1 id='0' />
                        <i1 id='1' />
                    </root>"));
    
                ds1.Merge(ds2);
                ds1.Relations.Add("i1_i2", ds1.Tables["i1"].Columns["id"], ds1.Tables["i2"].Columns["p"]);
    
                this.Width = 600;
                var sc = new SplitContainer { Dock = DockStyle.Fill, Parent = this, SplitterDistance = 250 };
                new DataGridView { Dock = DockStyle.Fill, Parent = sc.Panel1, AllowUserToAddRows = false,
                    DataSource = ds1, DataMember = "i1" };
                new DataGridView { Dock = DockStyle.Fill, Parent = sc.Panel2, AllowUserToAddRows = false,
                    DataSource = ds1, DataMember = "i1.i1_i2" };
            }
        }
    }
          
      
    • Помечено в качестве ответа mr_arti 11 февраля 2012 г. 12:23
    11 февраля 2012 г. 0:19

Все ответы

  • Здравствуйте.

    Обе таблицы DataTable должны быть в одном DataSet.

    Далее смотрите - Добавление объектов DataRelation (ADO.NET)

    Это должно решить вашу проблему.


    Для связи [mail]

    10 февраля 2012 г. 7:20
  • Не могли бы вы указать как правильно, я написал но не работает:

    private void button1_Click(object sender, EventArgs e)
            {
                DataSet customObject = new DataSet("customObject");
                var etalon = new DataTable("etalon");
                var testing = new DataTable("testing");
                etalon.ReadXml("etalon_collection.xml");
                testing.ReadXml("test_collection.xml");
                customObject.Tables.Add("etalon");
                customObject.Tables.Add("testing");
                customObject.Relations.Add("collection", customObject.Tables["etalon"].Columns["Price"], customObject.Tables["testing"].Columns["Price"]);
                sandGrid1.DataSource = customObject;
            }
    

    Мне в конце надо вывести все это в datagrid. Всплывает ошибка "DataTable "etalon" не соответствует ни одной DataTable в источнике."
    10 февраля 2012 г. 16:38
  • > У меня есть два файла 1.xml и 2.xml (т.е. две таблици datatable), мне необходимо их связать по ключевому полю. как это можно реализовать.
     
     

    using System.Data;
    using System.IO;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication5
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                var ds1 = new DataSet();
                ds1.ReadXml(new StringReader(@"
                    <root>
                        <i2 id='0' p='0' />
                        <i2 id='1' p='0' />
                        <i2 id='2' p='1' />
                    </root>"));
                
                var ds2 = new DataSet();
                ds2.ReadXml(new StringReader(@"
                    <root>
                        <i1 id='0' />
                        <i1 id='1' />
                    </root>"));
    
                ds1.Merge(ds2);
                ds1.Relations.Add("i1_i2", ds1.Tables["i1"].Columns["id"], ds1.Tables["i2"].Columns["p"]);
    
                this.Width = 600;
                var sc = new SplitContainer { Dock = DockStyle.Fill, Parent = this, SplitterDistance = 250 };
                new DataGridView { Dock = DockStyle.Fill, Parent = sc.Panel1, AllowUserToAddRows = false,
                    DataSource = ds1, DataMember = "i1" };
                new DataGridView { Dock = DockStyle.Fill, Parent = sc.Panel2, AllowUserToAddRows = false,
                    DataSource = ds1, DataMember = "i1.i1_i2" };
            }
        }
    }
          
      
    • Помечено в качестве ответа mr_arti 11 февраля 2012 г. 12:23
    11 февраля 2012 г. 0:19