如何在点击winforms上添加新行

时间:2014-12-18 19:25:11

标签: c# winforms datagridview datatable

我正在开发一个winforms应用程序,我已经走到了尽头。我想要做的就是在每个"点击",在我的DataTable中添加一个新行,并在表单中输入值。此Datatable是我DataGridView的数据源。有人能指出我如何实现这一目标的正确方向。

我看过的文章:

How to add new row to datatable gridview

我的代码:

private void btnAdd_Click(object sender, EventArgs e)
        {
        //inserting into order table
        DataTable dt = new DataTable();

        string articleId = cmbArticle.Text;
        string productDescription = txtDesc.Text;
        string type = txtType.Text;
        string materialType = txtMaterial.Text;
        string size = cmbSizes.Text;
        string quantity = txtQuantity.Text;

        try
        {
            dt.Columns.Add("Article");
            dt.Columns.Add("Description");
            dt.Columns.Add("Type");
            dt.Columns.Add("Material");
            dt.Columns.Add("Size");
            dt.Columns.Add("Quantity");
            dt.Columns.Add("DateTime");

            DataRow dr = dt.NewRow();
                //addrows
                dr["Article"] = articleId;
                dr["Description"] = productDescription;
                dr["type"] = type;
                dr["Material"] = materialType;
                dr["Size"] = size;
                dr["Quantity"] = quantity;

            dt.Rows.Add(dr);

            dgvView.DataSource = dt;
        }
        catch (Exception ex)
        {

        }
    }

1 个答案:

答案 0 :(得分:4)

在每次点击时,您都会创建一个只有一行的新DataTable,您需要创建一次DataTable,然后在点击中继续添加行。在课程级别定义DataTable,然后在您的活动中添加一个新行。

DataTable dt = new DataTable(); //at class level
private void Form1_Load(object sender, EventArgs e)
{
    CreateDataTableColumns();
    //.... your code
}

然后有一个创建表结构的方法,从From_Load事件中调用该方法一次

private void CreateDataTableColumns()
{
    dt.Columns.Add("Article");
    dt.Columns.Add("Description");
    dt.Columns.Add("Type");
    dt.Columns.Add("Material");
    dt.Columns.Add("Size");
    dt.Columns.Add("Quantity");
    dt.Columns.Add("DateTime");
}

稍后在DataTable事件中向您的班级Add添加行。

private void btnAdd_Click(object sender, EventArgs e)
{
    string articleId = cmbArticle.Text;
    string productDescription = txtDesc.Text;
    string type = txtType.Text;
    string materialType = txtMaterial.Text;
    string size = cmbSizes.Text;
    string quantity = txtQuantity.Text;

    try
    {
        DataRow dr = dt.NewRow();
        //addrows
        dr["Article"] = articleId;
        dr["Description"] = productDescription;
        dr["type"] = type;
        dr["Material"] = materialType;
        dr["Size"] = size;
        dr["Quantity"] = quantity;
        dt.Rows.Add(dr);
        dgvView.DataSource = dt;
    }
    catch (Exception ex)
    {

    }
}

(我相信你正在使用catch块中的异常对象,比如日志记录,向用户显示消息等)