2010-08-03 81 views
0

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

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

编辑: 这里是代码:

从一些原因,DateGridView isonly具有一行(这是在点击激活的方法的按钮)

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); 
} 
+0

不知道如果我理解正确的问题,但你为什么不能添加新行的数据表,当你需要? – 2010-08-03 18:45:25

+0

您是否将此表绑定到您的数据网格,以及如何添加其他行? – 2010-08-03 19:01:44

+0

我尝试添加其他行,相同的语法,不同的名称。 – 2010-08-03 19:10:24

回答

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); 
} 
+0

我添加了更多信息。 – 2010-08-03 18:53:09

+0

@Gilad,我加了一点比你要求的更多,但我希望它有帮助。您也可以将要添加该行的表作为参数传递给'AddValue(...)'方法。 – 2010-08-03 19:15:22

+0

编译器无法识别“File.Exists” 我应该使用哪个命名空间? – 2010-08-03 19:21:20

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中调用。

+0

这就是我所做的,它不工作。也许你可以告诉我我的代码是否错误? – 2010-08-03 19:02:19

+0

我刚刚编辑了我的答案。如果您的DataGridView绑定到数据源(如DataTable),将会更容易了解。 – duraz0rz 2010-08-03 19:13:43

+0

是的,它是:dataGridView1.DataSource = dt; – 2010-08-03 19:25:22

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(); 
    } 
} 
+1

恩,谢谢。 。 。虽然有点晚了。无论如何,我没有使用ASP.NET – 2011-11-17 16:38:03

相关问题