2016-06-30 5 views
0

これまでのコードはここにあります。テーブルは正しく塗りつぶされています。しかし、どのように私は、有効なテーブルに編集行を挿入し、それを編集テーブルから削除することができますか?名前、電子メール、およびモバイルの3つの列しか含まれていないExcelシートからテーブルをインポートしたため、プライマリキーがありません。更新ボタンをクリックした後、新しいデータセットに新しいデータセットを挿入して古いデータセットから削除したい

What I'm trying to do

これは私がこれまで持っているものです。

protected void GridView4_RowCommand(object sender, GridViewCommandEventArgs e) 
 
    { 
 

 
     if (e.CommandName=="Update") 
 
     { 
 
      DataSet EditT = new DataSet(); 
 
      DataSet ValidT = new DataSet(); 
 
      if (Session["Edit"] != null) 
 
      { 
 
       EditT = (DataSet)Session["Edit"]; 
 
      } 
 
      if (Session["Valid"] != null) 
 
      { 
 
       ValidT = (DataSet)Session["Valid"]; 
 
      } 
 
      
 
      
 
      DataTable dtEdit = EditT.Tables[0]; 
 
      DataTable dtValid = ValidT.Tables[0]; 
 
     } 
 
    }

、あなたは私がここにExcelシートをアップロードしたかを確認したい場合は、コードです:

protected void UploadBtn_Click(object sender, EventArgs e) 
 
    { 
 
     string filename = string.Empty; 
 
     if(FileUpload1.HasFile) 
 
     { 
 

 
      try 
 
      { 
 
       string[] allowFile = { ".xls", ".xlsx" }; 
 
       string fileExt = System.IO.Path.GetExtension(FileUpload1.PostedFile.FileName); 
 
       bool isVaidFile = allowFile.Contains(fileExt); 
 
       if (!isVaidFile) 
 
       { 
 
        MessageLbl.ForeColor = System.Drawing.Color.Red; 
 
        MessageLbl.Text = "Must be an Excel file"; 
 
       } 
 
       else 
 
       { 
 
        int fileSize = FileUpload1.PostedFile.ContentLength; 
 
        if (fileSize <= 1048576) 
 
        { 
 
         filename = Path.GetFileName(Server.MapPath(FileUpload1.FileName)); 
 
         FileUpload1.PostedFile.SaveAs(Server.MapPath("~/UploadExcel/") + filename); 
 
         string filePath = Server.MapPath("~/UploadExcel/") + filename; 
 
         OleDbConnection con = null; 
 
         if (fileExt == ".xls") 
 
         { 
 
          con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";"); 
 
         } 
 
         else if (fileExt == ".xlsx") 
 
         { 
 
          con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";"); 
 
         } 
 
         con.Open(); 
 
         DataTable dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
 
         string getExcelSheetName = dt.Rows[0]["Table_Name"].ToString(); 
 
         string ExcelCommandText = @" SELECT * FROM [" + getExcelSheetName + @"]"; 
 
         string ValidExcelCommandText = @"SELECT * FROM [" + getExcelSheetName + @"] where ((Email like '%@_%.com') and (Name is not null) and not (ISNUMERIC(Mobile) = 0))"; 
 
         string EditExcelCommandText = @" SELECT * FROM [" + getExcelSheetName + @"] where Email not like '%@_%.com' or Email is null or Name is null or Mobile is null or Mobile not like '^[[:digit:]]+$'"; 
 
         OleDbCommand ExcelCommand = new OleDbCommand(ExcelCommandText, con); 
 
         OleDbCommand EditExcelCommand = new OleDbCommand(EditExcelCommandText, con); 
 
         OleDbCommand ValidExcelCommand = new OleDbCommand(ValidExcelCommandText, con); 
 
         OleDbDataAdapter EditAdapter = new OleDbDataAdapter(EditExcelCommand); 
 
         OleDbDataAdapter ValidAdapter = new OleDbDataAdapter(ValidExcelCommand); 
 
         OleDbDataAdapter ExcelAdapter = new OleDbDataAdapter(ExcelCommand); 
 
         DataSet ExcelDataSet = new DataSet(); 
 
         DataSet EditDataSet = new DataSet(); 
 
         DataSet ValidDataset = new DataSet(); 
 
         Session["Edit"] = EditDataSet; 
 
         Session["Valid"] = ValidDataset; 
 
         
 
         EditAdapter.Fill(EditDataSet); 
 
         ValidAdapter.Fill(ValidDataset); 
 
         ExcelAdapter.Fill(ExcelDataSet); 
 
         con.Close(); 
 
         GridView5.DataSource = ValidDataset; 
 
         GridView4.DataSource = EditDataSet; 
 
         GridView3.DataSource = ExcelDataSet; 
 
         GridView3.DataBind(); 
 
         GridView4.DataBind(); 
 
         GridView5.DataBind(); 
 
        } 
 
        else 
 
        { 
 
         MessageLbl.Text = "Attachment file size should not be greater than 1 MB"; 
 
        } 
 
       } 
 
      } 
 
      catch (Exception ex) 
 
      { 
 
       MessageLbl.Text = "Error occurred while uploading file. " + ex.Message; 
 
      } 
 
     
 
     } 
 
     else 
 
     { 
 
      MessageLbl.Text = ""; 
 
     } 
 
     
 
     
 
    }

答えて

0

データテーブルで列が同じであると仮定して作業することで、そのインデックスを使用して行を識別できます。行の値を2番目のテーブルの新しい行にコピーすることができます。 dtEditに属する行だけを追加することはできず、.ItemArrayを使用しない限りエラーが発生します。これは何で起こっていることはdtValidTableは、それが編集されずに行を追加して、dtEditTableはそれの値の行を空にされているが、私はちょうど空のいずれかで無効な情報を持つ行を置き換えるよ削除されていないことである

 DataSet EditT = new DataSet(); 
     DataSet ValidT = new DataSet(); 

     DataRow row; 

     DataTable dtEdit = EditT.Tables[0]; 
     DataTable dtValid = ValidT.Tables[0]; 
     //Assuming columns match exactly; 

     int rowIndex = 0; //Find the index of the row that is clicked. 

     row = dtEdit.Rows[rowIndex]; 

     dtValid.Rows.Add(row.ItemArray); //NB: Must use .ItemArray as row belongs to dtEdit. 
     dtEdit.Rows[rowIndex].Delete(); 
+0

また、更新された行も起動されていますが、何も書かれていないので、「GridView 'GridView4'が処理されたイベントのRowUpdatingを処理しました。 – ytba92

+0

は、基本的に私は現在だけdtEdit – ytba92

+0

更新されていない私は、コードのこの部分をしようとしているにこだわっている: 'foreachの(行中のDataRow行) { 行[「名前」] =((テキストボックス)GridView4.FindControl ( "textBox1"))。 rows ["Email"] =((TextBox)GridView4.FindControl( "textBox2"))。テキスト。 rows ["Mobile"] =((TextBox)GridView4.FindControl( "textBox3"))。テキスト。 } dtValid.Rows.Add(row.ItemArray); ' – ytba92

関連する問題