2013-04-17 163 views
3

我正在处理一个项目,我想将行添加到Datatable,发生了什么是如果我从数据库中提取两行只有一个被添加到数据表但我希望两者都被添加到数据表中,即数据表不能保存第一行的数据,数据正在被第二行的数据覆盖。 该方法的代码是。 这是我的通话声明。向c#中的数据表添加行

DataTable dttable = new DataTable(); 
    dttable = gettable(dtgreater, dtcurrentdate); 
    public DataTable gettable(List<DateTime> objct1, DateTime objct2) 
    { 

    DataTable data=null; 
    for (int j = 0; j < dtgreater.Count; j++) 
    { 
     sql = "select library_issue.STUDENTCODE,library_issue.studentname,library_book.bookname,library_issue.issuedate,library_issue.returndate from library_issue    join library_book on library_book.book_id = library_issue.book_id where library_issue.returndate ='" + objct1[j].ToString("dd/MM/yyyy") + "'"; 
     ds = obj.openDataset(sql, Session["SCHOOLCODE"].ToString()); 
     Label1.Text = (ds.Tables[0].Rows.Count).ToString(); 
     data = new DataTable(); 
     data.Columns.Add("STUDENTCODE", typeof(int)); 
     data.Columns.Add("Studentname", typeof(string)); 
     data.Columns.Add("Bookname", typeof(string)); 
     data.Columns.Add("Issuedate", typeof(string)); 
     data.Columns.Add("Returndate", typeof(string)); 
     data.Columns.Add("NO of Days Exceeded", typeof(string)); 
     for (int i = 0; i < ds.Tables[0].Rows.Count; i++) 
     { 

      TimeSpan ts = objct1[j] - objct2; 
      Label1.Text = ts.ToString("dd"); 
      data.Rows.Add(ds.Tables[0].Rows[i]["STUDENTCODE"], ds.Tables[0].Rows[i]["studentname"], ds.Tables[0].Rows[i]["bookname"], ds.Tables[0].Rows[i]["issuedate"], ds.Tables[0].Rows[i]["returndate"], ts.ToString("dd")); 

     } 

    } 

    return data; 
} 

UPDATE:

public DataTable gettable(List<DateTime> objct1, DateTime objct2) 
    { 

     DataTable data = new DataTable(); 

     data.Columns.Add("STUDENTCODE", typeof(int)); 
     data.Columns.Add("Studentname", typeof(string)); 
     data.Columns.Add("Bookname", typeof(string)); 
     data.Columns.Add("Issuedate", typeof(string)); 
     data.Columns.Add("Returndate", typeof(string)); 
     data.Columns.Add("NO of Days Exceeded", typeof(string)); 
    for (int j = 0; j < dtgreater.Count; j++) 
    { 
     sql = "select library_issue.STUDENTCODE,library_issue.studentname,library_book.bookname,library_issue.issuedate,library_issue.returndate from library_issue    join library_book on library_book.book_id = library_issue.book_id where library_issue.returndate ='" + objct1[j].ToString("dd/MM/yyyy") + "'"; 
     ds = obj.openDataset(sql, Session["SCHOOLCODE"].ToString()); 
     Label1.Text = (ds.Tables[0].Rows.Count).ToString(); 

     for (int i = 0; i < ds.Tables[0].Rows.Count; i++) 
     { 

      TimeSpan ts = objct1[j] - objct2; 
      Label1.Text = ts.ToString("dd"); 
      data.Rows.Add(ds.Tables[0].Rows[i]["STUDENTCODE"], ds.Tables[0].Rows[i]["studentname"], ds.Tables[0].Rows[i]["bookname"], ds.Tables[0].Rows[i]["issuedate"], ds.Tables[0].Rows[i]["returndate"], ts.ToString("dd")); 

     } 

    } 

    return data; 
} 

描述:当我初始化里面的DataTable中的for循环这是造成数据表中每次有新的实例的创建。 因此,我每次只得到一行。

回答

4

您正在循环内创建数据表,因此在第二次迭代中,它将丢弃第一个数据表与第一个项目,并为第二个项目创建一个新的数据表。

创建数据表和循环之前的列添加到它:

DataTable dttable = new DataTable(); 
dttable = gettable(dtgreater, dtcurrentdate); 

public DataTable gettable(List<DateTime> objct1, DateTime objct2) 
{ 

    DataTable data = new DataTable(); 
    data.Columns.Add("STUDENTCODE", typeof(int)); 
    data.Columns.Add("Studentname", typeof(string)); 
    data.Columns.Add("Bookname", typeof(string)); 
    data.Columns.Add("Issuedate", typeof(string)); 
    data.Columns.Add("Returndate", typeof(string)); 
    data.Columns.Add("NO of Days Exceeded", typeof(string)); 
    for (int j = 0; j < dtgreater.Count; j++) { 
    sql = "select library_issue.STUDENTCODE,library_issue.studentname,library_book.bookname,library_issue.issuedate,library_issue.returndate from library_issue    join library_book on library_book.book_id = library_issue.book_id where library_issue.returndate ='" + objct1[j].ToString("dd/MM/yyyy") + "'"; 
    ds = obj.openDataset(sql, Session["SCHOOLCODE"].ToString()); 
    Label1.Text = (ds.Tables[0].Rows.Count).ToString(); 
    for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { 

     TimeSpan ts = objct1[j] - objct2; 
     Label1.Text = ts.ToString("dd"); 
     data.Rows.Add(ds.Tables[0].Rows[i]["STUDENTCODE"], ds.Tables[0].Rows[i]["studentname"], ds.Tables[0].Rows[i]["bookname"], ds.Tables[0].Rows[i]["issuedate"], ds.Tables[0].Rows[i]["returndate"], ts.ToString("dd")); 

    } 

    } 

    return data; 
} 
+0

我根据更新了我的代码你的建议,但我得到了一个错误,因为名为'学生编码'的列已经属于这个数据表。 – Ashish

+0

@Ashish:你从哪里得到这个错误?只有一个地方添加了列,并且在创建新的空数据表后立即生成。 – Guffa

1

将创建表的循环之外。

DataTable data = new DataTable(); 

这可能是更好的使用foreach这样的:

例如:

foreach (var dr in ds.Tables.First().Rows) 
{ 
    string studentCode = dr["STUDENTCODE"].ToString(); 
} 
0

删除行:data = new DataTable();

之外创建的DataTable对于像下面循环...

DataTable data = new DataTable(); 
    data.Columns.Add("STUDENTCODE", typeof(int)); 
    data.Columns.Add("Studentname", typeof(string)); 
    data.Columns.Add("Bookname", typeof(string)); 
    data.Columns.Add("Issuedate", typeof(string)); 
    data.Columns.Add("Returndate", typeof(string)); 
    data.Columns.Add("NO of Days Exceeded", typeof(string)) 
    for (int j = 0; j < dtgreater.Count; j++) 
    { 

它会解决你的问题......

+0

我更新了我的代码根据你的建议,但我得到一个错误,因为名为'学生代码'的列已经属于这个数据表。 – Ashish

+0

@Ashish:在运行时你遇到了这个错误......?你能指出那条线吗 – Pandian

0

,你可以在这里做什么是

DataTable dttable = new DataTable(); 
    dttable = gettable(dtgreater, dtcurrentdate); 
    public DataTable gettable(List<DateTime> objct1, DateTime objct2) 
    { 

    DataTable data=null; 
    for (int j = 0; j < dtgreater.Count; j++) 
    { 
     sql = "select library_issue.STUDENTCODE,library_issue.studentname,library_book.bookname,library_issue.issuedate,library_issue.returndate from library_issue    join library_book on library_book.book_id = library_issue.book_id where library_issue.returndate ='" + objct1[j].ToString("dd/MM/yyyy") + "'"; 
     ds = obj.openDataset(sql, Session["SCHOOLCODE"].ToString()); 
     Label1.Text = (ds.Tables[0].Rows.Count).ToString(); 
     if(data.Columns.count==0) 
     { 
     data = new DataTable(); 
     data.Columns.Add("STUDENTCODE", typeof(int)); 
     data.Columns.Add("Studentname", typeof(string)); 
     data.Columns.Add("Bookname", typeof(string)); 
     data.Columns.Add("Issuedate", typeof(string)); 
     data.Columns.Add("Returndate", typeof(string)); 
     data.Columns.Add("NO of Days Exceeded", typeof(string)); 
     } 

     for (int i = 0; i < ds.Tables[0].Rows.Count; i++) 
     { 

      TimeSpan ts = objct1[j] - objct2; 
      Label1.Text = ts.ToString("dd"); 
      data.Rows.Add(ds.Tables[0].Rows[i]["STUDENTCODE"], ds.Tables[0].Rows[i]["studentname"], ds.Tables[0].Rows[i]["bookname"], ds.Tables[0].Rows[i]["issuedate"], ds.Tables[0].Rows[i]["returndate"], ts.ToString("dd")); 

     } 

    } 

    return data; 
} 

我想这会为你工作

0
DataTable dttable = new DataTable(); 
dttable = gettable(dtgreater, dtcurrentdate); 
public DataTable gettable(List<DateTime> objct1, DateTime objct2) 
{ 
    DataTable data=null; 
    sql = "select library_issue.STUDENTCODE,library_issue.studentname,library_book.bookname,library_issue.issuedate,library_issue.returndate from library_issue    join library_book on library_book.book_id = library_issue.book_id where library_issue.returndate ='" + objct1[j].ToString("dd/MM/yyyy") + "'"; 
    ds = obj.openDataset(sql, Session["SCHOOLCODE"].ToString()); 
    Label1.Text = (ds.Tables[0].Rows.Count).ToString(); 


for (int j = 0; j < dtgreater.Count; j++) 
{ 
    if(data.Columns.count==0) 
    { 
    data = new DataTable(); 
    data.Columns.Add("STUDENTCODE", typeof(int)); 
    data.Columns.Add("Studentname", typeof(string)); 
    data.Columns.Add("Bookname", typeof(string)); 
    data.Columns.Add("Issuedate", typeof(string)); 
    data.Columns.Add("Returndate", typeof(string)); 
    data.Columns.Add("NO of Days Exceeded", typeof(string)); 
    } 

    for (int i = 0; i < ds.Tables[0].Rows.Count; i++) 
    { 

     TimeSpan ts = objct1[j] - objct2; 
     Label1.Text = ts.ToString("dd"); 
     data.Rows.Add(ds.Tables[0].Rows[i]["STUDENTCODE"], ds.Tables[0].Rows[i]["studentname"], ds.Tables[0].Rows[i]["bookname"], ds.Tables[0].Rows[i]["issuedate"], ds.Tables[0].Rows[i]["returndate"], ts.ToString("dd")); 

} 
return data; 
} 
+0

你做了什么以及为什么会走很长的路的简短描述 - 没有人喜欢玩*“发现差异”*。 – Emissary

0
Var.GRV.Columns.Add("NAME COLUMN"); 
      Var.GRV.Columns.Add("NAME COLUMN"); 
      Var.GRV.Columns.Add("*"); 
      Var.GRV.Columns.Add("*"); 
      Var.GRV.Columns.Add("*");