如何每次都写一个新的数据表行?

时间:2010-08-03 18:39:09

标签: c# .net datagridview datatable

如何在数据表中每次插入不同的行? 数据表在dataGridView中用于写入日志。当我无法知道运行时需要多少行时,我每次都需要在数据表中写入不同的行(行)。 另一件事;数据表是从XML文件加载的,因此数据表中可能已存在行。

我该怎么办? (简而言之,我总是写在同一行)C#

编辑: 这是代码:

由于某种原因,DateGridView只有一行(这是一个单击按钮激活的方法)

public void gridStart(string i, string b, string c)
        {
            DataTable dt = new DataTable();//empty table with no schema
            DataColumn colContactID = new DataColumn("Date", typeof(string));
            DataColumn colContactName = new DataColumn("Caller", typeof(string));
            DataColumn colResult = new DataColumn("Result", typeof(string));
            dt.Columns.Add(colContactID);
            dt.Columns.Add(colContactName);
            dt.Columns.Add(colResult);
            DataRow row = dt.NewRow();
            row["Date"] = i;
            row["Caller"] = b;
            row["Result"] = c;
            dt.Rows.Add(row);
}

3 个答案:

答案 0 :(得分:1)

您应该可以使用DataTable.NewRow()。该MSDN页面上有几个示例。如果您有更多问题,请在答案中提供一些示例代码。

private void Form1_Load(object sender, EventArgs e)
{
    dataGridView1.DataSource = MyDataTable;
}

private string _fileName = "MyCache.xml";

private DataTable _myDataTable;
public DataTable MyDataTable
{
    get
    {
        if (_myDataTable == null)
        {
            _myDataTable = new DataTable();
            if (File.Exists(_fileName))
                _myDataTable.ReadXml(_fileName);
            else
                InitDataTable(_myDataTable);
        }
        return _myDataTable;
    }
}

private void InitDataTable(DataTable table)
{
    table.TableName = "MyTable";
    table.Columns.Add("Date", typeof(DateTime));
    table.Columns.Add("Caller", typeof(string));
    table.Columns.Add("Result", typeof(string));
}

// Have your add code call this method!
private void AddValue(DateTime date, string caller, string result)
{
    var row = MyDataTable.NewRow();
    row["Date"] = date;
    row["Caller"] = caller;
    row["Result"] = result;
    MyDataTable.Rows.Add(row);
}

protected override void OnClosed(EventArgs e)
{
    if (_myDataTable != null)
        _myDataTable.WriteXml(_fileName,  XmlWriteMode.WriteSchema);
    base.OnClosed(e);
}

答案 1 :(得分:1)

如果它绑定到数据源,则需要先获取数据源

// Assuming it's a DataTable
DataTable dt = ((DataTable)myDataGridView.DataSource);  

在您的数据源中插入行(就像您的方法在帖子中所做的那样),然后告诉视图刷新其内容。

所以也许这样的事情可行:

public void gridStart()
{
    DataTable dt = new DataTable();
    DataColumn colContactID = new DataColumn("Date", typeof(string));
    DataColumn colContactName = new DataColumn("Caller", typeof(string));
    DataColumn colResult = new DataColumn("Result", typeof(string));
    dt.Columns.Add(colContactID);
    dt.Columns.Add(colContactName);
    dt.Columns.Add(colResult);
    dataGridView1.DataSource = dt;
    // Call method to insert values.
}

启动网格,并且:

public void gridInsert(string i, string b, string c)
{
    DataTable dt = (DataTable)myDataGridView.DataSource; 
    DataRow row = dt.NewRow();
    row["Date"] = i;
    row["Caller"] = b;
    row["Result"] = c;
    dt.Rows.Add(row);
    // Call another method to refresh grid view.
}

当您想要将数据插入DataTable时调用。

答案 2 :(得分:0)

我的解决方案:

public partial class _Default : System.Web.UI.Page
{
    DataTable tb = new DataTable();
}

protected void Page_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack == false)
    {
        DataTable dt = new DataTable("table");
        dt.Columns.Add(new DataColumn("NR", Type.GetType("System.Int32")));
        dt.Columns.Add(new DataColumn("Dihname", Type.GetType("System.String")));
        dt.Columns.Add(new DataColumn("ing", Type.GetType("System.String")));
        dt.Columns.Add(new DataColumn("Cost", Type.GetType("System.String")));
        Session["ss"] = dt;
    }
    protected void LinkButton1_Click(object sender, EventArgs e)
    {
         tb = (DataTable)Session["ss"];
         DataRow r1 = tb.NewRow();
         r1[0] = ViewState["dishid"].ToString();
         r1[1] = ViewState["dishname"];
         r1[3] = Label3.Text;
         tb.Rows.Add(r1);
         DataList5.DataSource = tb;
         DataList5.DataBind();
    }
}