2017-05-15 5 views
0

DataSetにDataTableの値を追加する方法ASP.NET C#Webformでforeachループを使用すると、実際にはgridviewが1つあり、 xlにのみダウンロードしてください。DataSetでDataTableの値を追加する方法C#Webformのすべてのforeachループを使用する方法C#Webform

xlボタンにエクスポートするコードは以下のとおりです。

 foreach (GridViewRow row in gv_TotalAllReg.Rows) 
     { 
      if (row.RowType == DataControlRowType.DataRow) 
      { 
       bool isChecked = ((CheckBox)row.FindControl("chk_box")).Checked; 
       if (isChecked == true) 
       { 
        //var ds = new DataSet(); 
        //var dt = new DataTable("RegistrationDetails"); 

        int index = row.RowIndex; 

        bo.Para1 = "4"; 
        bo.Para2 = "Innovation"; 

        bo.Para3 = gv_TotalAllReg.DataKeys[index].Values[0].ToString();//Id 



       } 
      } 
     } 
     dt = bl.Admin_GetInnovationbaseonParaType(bo); 
     if (gv_TotalAllReg.Rows.Count > 0) 
     { 
      dt.TableName = "RegistrationDetails"; 
      ds.Tables.Add(dt); 
      ExcelHelper.ToExcel(ds, "ApplicationDetails.xls", Page.Response); 
      btnExport.Visible = true; 


     } 

は、実際にデータが最後に選択されたデータは、XLシートに表示され、XLシートに表示されていないことのGridViewに選択チェックボックスを上のベース。

ロジックが得られませんds.Tables.Add(dt); foreachループごとにdsにdtの値を追加しました。選択したすべてのデータがxlシートに必要です。なぜ最後にxlシートしか入っていないデータを選択するのか。代わりに、あなたは全体のDataTableからデータセットを追加することができますデータセットのDataTableの各行を追加する

答えて

0

データセットはそうあなたがデータセットに複数のDataTableを追加することができますのDataTableのコレクションを保持することができます。

DataTable tbl = new Datatable();//or your method that returns datatable. 
DataSet ds = new DataSet(); //new dataset object 
ds.Tables.Add(tbl); //add datatable object in dataset object. 

更新

DataTable dt= new DataTable(); 
//Columns that should present in datatable 
dt.Columns.Add("SN"); 
dt.Columns.Add("MyField"); 
int sn = 1; 
foreach (GridViewRow row in gv_TotalAllReg.Rows) 
{ 
    if (row.RowType == DataControlRowType.DataRow) 
    { 
     bool isChecked = ((CheckBox)row.FindControl("chk_box")).Checked; 
     if (isChecked == true) 
     { 
      DataRow row = dt.NewRow(); 
      //Add necessary columns to row by index. 
      row[0] = sn; 
      row[1] = gv_TotalAllReg.DataKeys[index].Values[0].ToString(); 
      dt.Rows.Add(row); 
      sn++; 
     } 
    } 
} 
if (tbl .Rows.Count > 0) 
{ 
ds.Tables.Add(dt); 
ExcelHelper.ToExcel(ds, "ApplicationDetails.xls", Page.Response); 
btnExport.Visible = true; 
} 
+0

再び取って、最後に選択したデータのみ、ご質問の上に従った完全な答えを更新することができ、ここで追加しDataTableからデータを検索すると例があります。 @Bhuban –

+0

あなたは私のforeachループのロジックを確認することができますIDの正しいベースは、チェックボックスのデータを選択する必要があります。 @Bhuban –

+0

add dt = bl.Admin_GetInnovationbaseonParaType(bo); inside if(isChecked == true) dtがDataTableだと思いますので、dtに行(DataRow)を追加する必要があります。 dtがDatatableの場合、あなたが今行っていることは、boを使ってforeachの最後に新しいDatatableを作成することです。それをforeach内に置くと毎回オブジェクトが作成されるので正確な結果が得られますが、データテーブルに行を追加すると、必要なすべてのレコードが取得されます。 –

0

私はあなたがforeachループの前にクレタDataTableすることができると思うし、その中の行を追加します。

DataTable dt = bl.Admin_GetInnovationbaseonParaType(bo); 
if (gv_TotalAllReg.Rows.Count > 0) 
{ 
    dt.TableName = "RegistrationDetails"; 
    ds.Tables.Add(dt);    

    foreach (GridViewRow row in gv_TotalAllReg.Rows) 
    { 
     if (row.RowType == DataControlRowType.DataRow) 
     { 
      bool isChecked = ((CheckBox)row.FindControl("chk_box")).Checked; 
      if (isChecked == true) 
      {      
       // inserting data row 
       dr = dt.NewRow(); 
       dr.SetField("Column_Name", "your_Value"); 
       dt.Rows.Add(dr); 

       int index = row.RowIndex; 

       bo.Para1 = "4"; 
       bo.Para2 = "Innovation"; 

       bo.Para3 = gv_TotalAllReg.DataKeys[index].Values[0].ToString();//Id 
      } 
     } 
    } 

    ExcelHelper.ToExcel(ds, "ApplicationDetails.xls", Page.Response); 
    btnExport.Visible = true; 
} 

取得データ:

string[] values = dt.AsEnumerable().Select(r => r.Field<string>("Value")).ToArray(); 
+0

どこにこのmedthodを追加する必要があります:dt = bl.Admin_GetInnovationbaseonParaType(bo); if(gv_TotalAllReg.Rows.Count> 0)。 @ daniell89 –

+0

@ mazhar124 - 更新されました – daniell89

関連する問題