Попытка создать DataGridView из пар ключ-значение в C # - PullRequest
0 голосов
/ 01 июля 2010

В приложении Windows Form я пытаюсь создать DataGridView с двумя столбцами: один для ключа, заданного элементом XML, и один для значения указанного элемента XML.Пока это мой код:

        this.myData = new DataGridView();
        ((System.ComponentModel.ISupportInitialize)(myData)).BeginInit();

        myData.Location = new System.Drawing.Point(12, 42);
        myData.Name = "myData";
        myData.Size = new System.Drawing.Size(1060, 585);
        myData.TabIndex = 32;

        foreach (XElement xElem in xInfoItems)
        {
            numItems++;
        }

        myData.Columns.Add(new DataGridViewTextBoxColumn());
        myData.Columns.Add(new DataGridViewTextBoxColumn());
        myData.Columns[0].Name = "Key";
        myData.Columns[0].DataPropertyName = "key";
        myData.Columns[1].Name = "Value";
        myData.Columns[1].DataPropertyName = "value";

        List<myRow> data = new List<myRow>();


        foreach (XElement xElem in xInfoItems)
        {
            data.Add(new myRow(xElem.Attribute("key").Value, xElem.Value));
        }

        myData.DataSource = data;

        myData.Refresh();

        this.PerformLayout();

Я подтвердил, что вся информация в data загружается через foreach, поэтому эта часть работает.Моя проблема в том, что сетка отображается, но ничего не отображается на сетке.Что я делаю неправильно?Я не очень хорош в этом типе данных, поэтому я прошу прощения, если это что-то очевидное.t правильно настроить myData в режиме конструктора.После добавления класса myRow он работал отлично.Спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 01 июля 2010

Вероятно, изменения, которые я сделал в вашем коде, могут помочь. (Я просто сосредоточился на той части, где вы создаете столбцы и добавляете строки, используя DataTable).

this.myData = new DataGridView();
((System.ComponentModel.ISupportInitialize)(myData)).BeginInit();

myData.Location = new System.Drawing.Point(12, 42);
myData.Name = "myData";
myData.Size = new System.Drawing.Size(1060, 585);
myData.TabIndex = 32;

foreach (XElement xElem in xInfoItems)
{
    numItems++;
}


// Here we create a DataTable with two columns.
DataTable table = new DataTable();
table.Columns.Add("Key", typeof(string));
table.Columns.Add("Value", typeof(string));

foreach (XElement xElem in xInfoItems)
{
     //Here we add rows to table
     table.Rows.Add(xElem.Attribute("key").Value, xElem.Value);
}

myData.DataSource = table;

myData.Refresh();

this.PerformLayout(); 
1 голос
/ 01 июля 2010

Проблема может лежать в вашем классе myRow.Когда я пытался воспроизвести ваш код, я сначала определил «ключ» и «значение» как открытые поля класса myRow следующим образом:

public class myRow {
  public string key;
  public string value;

  public myRow( string Key, string Value )
  {
     key = Key;
     value = Value;
  }

}

Это вызвало появление связанных строк, но текст былне в клетках.Когда я изменил их оба свойства, привязка работала намного лучше:

public class myRow{
  private string _key;
  public string key
  {
     get
     {
        return _key;
     }
  }

  private string _value;
  public string value
  {
     get
     {
        return _value;
     }
  }

  public myRow( string Key, string Value )
  {
     _key = Key;
     _value = Value;
  }

}

...