在datagridview中添加多个“临时”值并将它们存储在数据库中

时间:2012-02-17 04:09:01

标签: c# winforms datagridview temporary

你好,有人知道如何将临时数据添加到datagridview中吗?

我有2个组合框:genderComboBox(项目:女性,男性),countryComboBox(项目:美国,德国) 1个按钮(buttonAdd): 1 datagridview(genderColumn,countryColumn):

如何将它们添加到datagridview?我不希望它们直接存储到数据库中。

如何在gridview中添加多个值?

这是我试过的

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

在这个解决方案中,我可以看到两个问题:

  1. 每次点击按钮,它总会创建一个新列。我想要的是我只需指定哪个列并用数据填充它。
  2. 每次点击按钮,都不会添加我之前添加的内容。因此,我无法在datagrid中添加临时多个值。
  3. 谢谢!!!

4 个答案:

答案 0 :(得分:2)

创建一个列表项,该列表项是包含OnClick事件的类的datamember。将DataSource设置为构造函数中的列表。当有人单击“添加”按钮时,使用comobo框中的值将一个anoymous对象添加到列表中,然后将数据重新绑定到datagrid。这是一个简短的例子。

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 :(得分:1)

  1. 这是因为您在每次点击时都会创建一个列。
  2. 这是因为您在每次点击时都会创建一个DataTable。
  3. 将创建代码放在构造函数中,然后将click方法放在click事件中。

答案 2 :(得分:1)

DataTable table = new 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");

答案 3 :(得分:-1)

你可以试试这个:

//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;
         }

HTH。