Добавление нескольких «временных» значений в сетку данных и сохранение их в базе данных - PullRequest
1 голос
/ 17 февраля 2012

Здравствуйте, есть ли здесь кто-нибудь, кто знает, как добавить временные данные в представление данных?

У меня есть 2 поля со списком: гендерный список (элементы: женский, мужской), странаComboBox (элементы: США, Германия) 1 кнопка (buttonAdd): 1 сетевое представление (гендерная колонка, countryColumn):

Как их добавить в сеточную таблицу?Я не хочу, чтобы они сохранялись непосредственно в базе данных.

И как я могу добавить их несколько значений в виде сетки?

Вот что я пробовал

private void buttonAdd_Click(object sender, EventArgs e)
        {
            DataTable table = new DataTable(); 
            table.Columns.Add("Country");
            table.Rows.Add(countryComboBox.Text);
            dataGridView1.DataSource = table;
        }

В этом решении я вижу 2 проблемы:

  1. Каждый раз, когда я нажимаю кнопку, он всегда создает новый столбец.Что я хочу, так это то, что я просто укажу, какой столбец и заполню его данными.
  2. Каждый раз, когда я нажимаю кнопку, он не добавляет того, что я добавил ранее.Поэтому я не могу добавить несколько временных значений в сетку данных.

Спасибо !!!

Ответы [ 4 ]

2 голосов
/ 17 февраля 2012

Создайте элемент списка, который представляет собой дата-класс класса, который содержит событие OnClick.Установите DataSource в список в конструкторе.Когда кто-то нажимает кнопку «Добавить», добавьте аномальный объект в список, используя значения из полей со списком, затем снова свяжите данные с сеткой данных.Вот краткий пример.

YourClass
{
private List<object> list;

public Page_Load(object sender, args e)
{
          if (!isPostBack) // only initialize once when the page first loads
          {
              list = new List<object>();
              datagrid.datasource = list;
          }
}

protected void OnClickButton(object sender, args e)
{
     list.add(new { Gender = genderComboBox.Text, Country = countryComoBox.Text });
     datagrid.DataBind();
}
}

Редактировать: Вот ссылка для получения дополнительной информации об анонимных типах, http://msdn.microsoft.com/en-us/library/bb397696.aspx.Для меня они гораздо более гибкие и динамичные для быстрого заполнения сетки, чем создание столбцов вручную и т. Д.

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

1 голос
/ 17 февраля 2012
DataTable table = new DataTable(); 

В результате получен новый очистить Datatable.Вот причина, по которой ваша старая вставка отсутствует. Сделайте так:

DataTable table = new DataTable(); 
private void buttonAdd_Click(object sender, EventArgs e)
        {
           //insert your value at the right place
           datatable.rows.add();
           datatable.rows[datagrid.rows.count].cells[x].value = countrybox.Text;
           //x = columns index of your country column
        }

создайте столбцы при запуске, возможно, form_load

datatable.columns.add("country");
1 голос
/ 17 февраля 2012
  1. Это потому, что вы создаете столбец при каждом клике.
  2. Это потому, что вы создаете таблицу данных для каждого клика.

Поместите код создания в конструктор, затем метод add в событие click.

0 голосов
/ 17 февраля 2012

Вы можете попробовать это:

//Create 2 datasource for combobox in grid
                DataTable genderTable= new DataTable();
                genderTable.Columns.Add(new DataColumn("Value", typeof(int)));
                genderTable.Columns.Add(new DataColumn("Name", typeof(String)));
                genderTable.Rows.Add(new object[] { 0, 'male'});
                genderTable.Rows.Add(new object[] { 1, 'female'});

                DataTable countryTable= new DataTable();
                countryTable.Columns.Add(new DataColumn("Value", typeof(int)));
                countryTable.Columns.Add(new DataColumn("Name", typeof(String)));
                countryTable.Rows.Add(new object[] { 0, 'USA'});
                countryTable.Rows.Add(new object[] { 1, 'Germany'});

//Create 2 combobox column
                 DataGridViewColumn gender= new DataGridViewColumn(new DataGridViewComboBoxCell());
                 DataGridViewColumn country= new DataGridViewColumn(new DataGridViewComboBoxCell());

//Add column into grid
                dataGridView1.Columns.Add(gender);
                dataGridView1.Columns.Add(country);
// Add rows into grid, number of rows is 10 
                dataGridView1.Rows.Add(10);

                for (int i = 0; i < 10; i++) {
                    ((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[0]).DataSource = genderTable;
                    ((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[0]).DisplayMember = "Name";
                    ((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[0]).ValueMember = "Value";
                    ((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[0]).Value = 0;

                    ((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[1]).DataSource = countryTable;
                    ((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[1]).DisplayMember = "Name";
                    ((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[1]).ValueMember = "Value";
                    ((DataGridViewComboBoxCell)dataGridView1.Rows[i].Cells[1]).Value = 0;
         }

НТН.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...