Estoy trabajando en un proyecto y quiero agregar filas a la tabla de datos y lo que está sucediendo es que si estoy obteniendo dos filas de la base de datos de sólo uno de los dos se agrega a la tabla de datos, pero quiero tanto a agregarse a la tabla de datos que yo.e de la tabla de datos no es capaz de mantener los datos de la primera fila,los datos se sobrescriben los datos de la segunda fila.
el código del método.
este es mi instrucción de llamada.

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

ACTUALIZACIÓN:

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

Significado: Como yo era la inicialización de la tabla de datos dentro del bucle for que estaba provocando la creación de una nueva instancia de objeto datatable cada momento .
Como resultado de la cual yo era sólo una de las filas de cada momento.

InformationsquelleAutor Ashish | 2013-04-17

6 Comentarios

  1. 4

    Va a crear la tabla de datos dentro del bucle, por lo que en la segunda iteración se deseche la primera tabla de datos con el primer elemento y crear una nueva vacía para el segundo elemento.

    Crear la tabla de datos y agregar las columnas antes de que el bucle:

    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;
    }
    • he actualizado mi código de acuerdo a ur sugerencia, pero tengo un error como Una columna llamada ‘STUDENTCODE’ ya pertenece a este objeto DataTable.
    • De donde sacas ese error? Sólo hay un lugar donde se agrega la columna, y que es inmediatamente después de una nueva y vacía de la tabla de datos es creado.
  2. 1

    Lugar la creación de la tabla fuera del bucle.

    DataTable data = new DataTable();

    Es probablemente mejor usar un foreach como este:

    Por ejemplo:

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

    Quite la línea : data = new DataTable();

    Crear la tabla de datos fuera del bucle For, como el de abajo…

        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++)
    {

    se va a resolver su problema…

    • he actualizado mi código de acuerdo a ur sugerencia, pero tengo un error como Una columna llamada ‘STUDENTCODE’ ya pertenece a este objeto DataTable.
    • En el tiempo de ejecución en la línea que tiene este error…? Puede el punto de que la línea de
  4. 0

    Lo que se puede hacer aquí es

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

    Supongo que esto funcionará para usted

  5. 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;
    }
    • Una breve descripción de lo que has hecho y por qué va a ir un largo camino – a nadie le gusta jugar «spot the difference».
  6. 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("*");

Dejar respuesta

Please enter your comment!
Please enter your name here