2010-02-25 7 views
4

J'ai un gridview qui contiendra un certain nombre de rangées .... Maintenant je veux ajouter toutes les rangées du gridview à un datatable qui sera employé pour l'opération de bulkcopy ...Comment ajouter des lignes gridview à une datatable?

J'ai trouvé ce http://www.codeproject.com/KB/aspnet/GridView_To_DataTable.aspx

Mais je veux toutes les colonnes de mon gridview à ajouter à la datarow du datatable Grid http://img85.imageshack.us/img85/4044/gridp.jpg

Je veux convertir GridView DATATABLE sur soumettre .... Toute suggestion ...

EDIT:

Réponse ci-dessous œuvres et j'ai trouvé une réponse aussi ...

DataTable dt = new DataTable(); 
    dt.Columns.Add(new DataColumn("EmpId", typeof(Int64))); 
    dt.Columns.Add(new DataColumn("FromDate", typeof(DateTime))); 
    dt.Columns.Add(new DataColumn("ToDate", typeof(DateTime))); 
    dt.Columns.Add(new DataColumn("DaysPresent", typeof(double))); 
    dt.Columns.Add(new DataColumn("OpeningAdvance", typeof(double))); 
    dt.Columns.Add(new DataColumn("AdvanceDeducted", typeof(double))); 
    dt.Columns.Add(new DataColumn("RemainingAdvance", typeof(double))); 
    dt.Columns.Add(new DataColumn("SalaryGiven", typeof(double))); 
    dt.Columns.Add(new DataColumn("CreatedDate", typeof(DateTime))); 

    foreach (GridViewRow row in gridEmployee.Rows) 
    { 
     if (row.RowType == DataControlRowType.DataRow) 
     { 
      DataRow dr = dt.NewRow(); 
      dr["EmpId"] = Convert.ToInt64(((HiddenField)row.Cells[0].FindControl("HiddenId")).Value); 
      dr["FromDate"] = Convert.ToDateTime(GetMonthNumberFromAbbreviation(fromdate[1].ToString()) + '/' + fromdate[0].ToString() + '/' + fromdate[2].ToString()); 
      dr["ToDate"] = Convert.ToDateTime(GetMonthNumberFromAbbreviation(todate[1].ToString()) + '/' + todate[0].ToString() + '/' + todate[2].ToString()); 
      dr["DaysPresent"] = Convert.ToDouble(((TextBox)row.Cells[3].FindControl("TxtDaysPresent")).Text); 
      dr["OpeningAdvance"] = Convert.ToDouble(((TextBox)row.Cells[4].FindControl("txtOpeningAdv")).Text); 
      dr["AdvanceDeducted"] = Convert.ToDouble(((TextBox)row.Cells[5].FindControl("TxtAdvanceDeducted")).Text); 
      dr["RemainingAdvance"] = Convert.ToDouble(((TextBox)row.Cells[6].FindControl("TxtClosingAdvance")).Text); 
      dr["SalaryGiven"] = Convert.ToDouble(((TextBox)row.Cells[7].FindControl("TxtSalary")).Text); 
      dr["CreatedDate"] = Convert.ToDateTime(System.DateTime.Now.ToString()); 
      dt.Rows.Add(dr); 
     } 
    } 
    SqlBulkCopy sbc = new SqlBulkCopy(connectionString); 
    sbc.DestinationTableName = "SalaryDetails"; 
    sbc.ColumnMappings.Add("EmpId", "EmpId"); 
    sbc.ColumnMappings.Add("FromDate", "FromDate"); 
    sbc.ColumnMappings.Add("ToDate", "ToDate"); 
    sbc.ColumnMappings.Add("DaysPresent", "DaysPresent"); 
    sbc.ColumnMappings.Add("OpeningAdvance", "OpeningAdvance"); 
    sbc.ColumnMappings.Add("AdvanceDeducted", "AdvanceDeducted"); 
    sbc.ColumnMappings.Add("RemainingAdvance", "RemainingAdvance"); 
    sbc.ColumnMappings.Add("SalaryGiven", "SalaryGiven"); 
    sbc.ColumnMappings.Add("CreatedDate", "CreatedDate"); 
    sbc.WriteToServer(dt); 
    sbc.Close(); 
+0

Comment avez-vous obtenu les données en premier lieu? À partir d'un DataTable? – madatanic

+0

@madatanic mais je vais obtenir seulement les données de l'étiquette ... –

Répondre

2

vous pouvez parcourir DataGrid ligne par ligne et faire un fichier séparé par des virgules. utilisez ensuite Bulk insert ou bcp pour insérer des données dans db.

Une autre solution

DataTable dt = new DataTable();  
    for (int j = 0; j < grdList.Rows.Count; j++) 
    { 
     DataRow dr; 
     GridViewRow row = grdList.Rows[j]; 
     dr = dt.NewRow(); 
     for (int i = 0; i < row.Cells.Count; i++) 
     { 
      dr[i] = row.Cells[i].Text; 
     } 

     dt.Rows.Add(dr); 
    } 

SqlBulkCopy sbc = new SqlBulkCopy(targetConnStr); 
sbc.DestinationTableName = "yourDestinationTable"; 
sbc.WriteToServer(dt); 
sbc.Close(); 
+0

@masoud un échantillon .. –

+0

@Pandiya: s'il vous plaît voir la réponse éditée. –

+0

@masoud foreach instruction ne peut pas fonctionner sur des variables de type 'System.Web.UI.WebControls.GridView' car 'System.Web.UI.WebControls.GridView' ne contient pas de définition publique pour 'GetEnumerator' –

Questions connexes