我正在使用asp.net网格视图来显示Excel工作表中的数据。我还可以使用网格视图将数据添加到此Excel工作表。我面临的问题是编辑/更新和删除gridview / excel中的记录。当我更新一行时,它会更新每一行。
我没有主键,因为它是excel表,只有两列名称和值,两者都应该是可更新的
这是我尝试的内容
GridViewRow row = (GridViewRow)gvExcelFile.Rows[e.RowIndex];
TextBox TxtEditName = (TextBox)row.FindControl("TxtEditName");
TextBox TxtEditValue = (TextBox)row.FindControl("TxtEditValue");
string enm = TxtEditName.Text;
string evl = TxtEditValue.Text;
gvExcelFile.EditIndex = -1;
conn.Open();
string editquery = "UPDATE [Sheet1$] set [Name]=? ,[Value]=?";
OleDbCommand editcmd = new OleDbCommand(editquery, conn);
editcmd.Parameters.AddWithValue("[Name]", enm);
editcmd.Parameters.AddWithValue("[Value]", evl);
editcmd.ExecuteNonQuery();
conn.Close();
gvbind();
答案 0 :(得分:0)
您可以使用自动生成的列并将其用作主列
<asp:TemplateField HeaderText="S No">
<ItemTemplate>
<%# Container.DataItemIndex + 1 %>
</ItemTemplate>
</asp:TemplateField>
答案 1 :(得分:0)
我也试过这样做,我在网格视图中直接更新excel中的单元格,但是它给出了一个错误 - “System.Data.OleDb.OleDbException:UPDATE语句中的语法错误”。这也行不通
GridViewRow row = (GridViewRow)gvExcelFile.Rows[e.RowIndex];
TextBox TxtEditName = (TextBox)row.FindControl("TxtEditName");
TextBox TxtEditValue = (TextBox)row.FindControl("TxtEditValue");
string enm = TxtEditName.Text;
string evl = TxtEditValue.Text;
int editindex = gvExcelFile.EditIndex;
int currentindex = e.RowIndex;
string editquery = "UPDATE [Sheet1$] set Sheet1$A"+currentindex+"=? ,Sheet1$B"+currentindex+"=?";
gvExcelFile.EditIndex = -1;
conn.Open();
OleDbCommand editcmd = new OleDbCommand(editquery, conn);
editcmd.Parameters.AddWithValue("Sheet1$A"+currentindex, enm);
editcmd.Parameters.AddWithValue("Sheet1$B"+currentindex, evl);
editcmd.ExecuteNonQuery();
conn.Close();
gvbind();
答案 2 :(得分:0)
尝试使用它?
QueryString="UPDATE [Sheet1$] SET [name]=<new value>, [value]=<new vlue> WHERE ( [name]=<old name> AND [value]=<old value>)