После нажатия кнопки обновления я хочу вставить обновленный набор данных в новый набор данных, удалив его из старого

Вот код, который у меня есть. Таблицы заполняются правильно. Но как я могу вставить строку Edited в таблицу Valid, а затем удалить ее из таблицы Edit? У меня нет первичного ключа, поскольку таблицы были импортированы из листа Excel, который содержит только 3 столбца Имя, Электронная почта и Мобильный телефон.

То, что я пытаюсь сделать

Это то, что у меня есть до сих пор:

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

Исходя из предположения, что столбцы идентичны в таблицах данных, вы можете идентифицировать строку, используя ее индекс. Вы можете скопировать значения строки в новую строку во второй таблице. Вы не можете просто добавить строку, как она относится к dtEdit, и будет вызывать ошибку, если вы не используете .ItemArray.

  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(); 
  • Открыть файл Excel usint Interop с помощью C #
  • Как преобразовать файл Excel с несколькими листами в набор файлов TSV?
  • Отслеживание рабочей книги и перечня рабочих листов
  • C # чтение нескольких файлов Excel
  • Какой самый быстрый способ загрузить лишний лист с более чем 100 000 строк кода на C #?
  • События для DropDown, размещенные внутри Excel
  • Как графические приложения вычисляют область просмотра?
  • Новое письмо Outlook в строке Excel
  • Как использовать getActiveObject («Excel.Application»)
  • Какой цветовой код это?
  • OleDbException Не задано значение для одного или нескольких требуемых параметров
  • Interesting Posts
    Давайте будем гением компьютера.