我想读取并存储从GridView中选择的相应行的DataKeyNames值,以便我可以将该值作为条件传递给我的UPDATE查询。
我有一个GridView,我在其中显示以下内容:
string bob;
bob = malloc(SIZE);//how much memory you want , mention in SIZE variable.
printf("enter the string\n");
scanf("%s",bob);
printf("%s\n", bob);
我的数据库有一个ID字段,我没有在GridView上显示。
当我点击按钮时,我应该能够在GridView中更新所选行; UPDATE SQL命令的WHERE子句必须是所选行的ID。此ID存储在数据库中,在GridView中不可见。因此,必须从数据库中读取相应的ID值。
我的按钮点击事件如下:
<asp:GridView ID="GridViewSavingsTracker" AutoGenerateColumns="false"
runat="server" DataKeyNames="ID"
OnRowCommand="GridViewSavingsTracker_RowCommand">
<Columns>
<asp:CommandField ShowSelectButton="true" />
<asp:BoundField DataField="creditorName" HeaderText="Creditor Name" />
<asp:BoundField DataField="amount" HeaderText="Principal Amount" />
<asp:BoundField DataField="interestRate" HeaderText="Interest Rate" />
<asp:BoundField DataField="interestType" HeaderText="Interest Type" />
<asp:BoundField DataField="interestCalculationMethod" HeaderText="Interest Calculation Method" />
</Columns>
</asp:GridView>
我使用RowCommand填充TextBoxes,我按以下方式读取rowID:
protected void ButtonUpdate_Click(object sender, EventArgs e)
{
con.Open();
string updateCommand = "UPDATE table_name SET employeeName = '" +TextBoxEmployeeName.Text+"' WHERE ID=...<The ID value that will be read from the Database has to come here>...";
OleDBCommand updateCommand = new OleDBCommand(updateQuery,con);
updateCommand.ExecuteNonQuery();
con.Close();
ShowGrid(); // Method to populate and display the GridView on the screen.
}
简而言之,当在GridView中选择特定行时,我需要从MS Access数据库中读取ID值(其中ID是我的数据库中的列,每个元组具有唯一的ID值)。当我点击&#34;更新&#34;网页上的按钮。一旦我能够做到这一点,那么我将能够将该值放在代码中的SQL命令中并进行更新。
我正在努力做大卫在答案中提到的:
https://stackoverflow.com/a/19824029/8930129
但&#34; row&#34;得到一个空值,因为我得到一个System.NullReferenceException。
protected void GridViewSavingsTracker_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Select")
{
int rowID = Convert.ToInt32(e.CommandArgument);
}
}
答案 0 :(得分:0)
我不确定你是否正确地采取了正确的方式。您想使用gridview行号来查找数据库ID,以便您可以使用该数据库ID更新数据库中的行吗?
您应该能够将ID存储为GridView的一部分,即使您没有显示它们。
查看GridView的DataKeyNames属性。它允许您指定对象的主键字段。
然后你可以访问回发事件的ID,看看这个例子:
答案 1 :(得分:0)
我能够通过以下方式使其发挥作用:
string updateQuery = "UPDATE " + table_name + " SET creditorName = ?, amount = ?, interestRate = ?, ... WHERE savingsID = ?";
using (OleDbConnection con = new OleDbConnection(connectionString))
{
con.Open();
using (OleDbCommand updateCommand = new OleDbCommand(updateQuery, con))
{
updateCommand.CommandType = CommandType.Text;
updateCommand.Parameters.AddWithValue("creditorName", TextBoxCreditorName.Text);
updateCommand.Parameters.AddWithValue("amount", TextBoxPrincipalAmount.Text);
updateCommand.Parameters.AddWithValue("interestRate", TextBoxInterestRate.Text);
updateCommand.Parameters.AddWithValue("savingsID", tupleID);
updateCommand.ExecuteNonQuery();
con.Close();
}
}
我以下列方式获得tupleID
的值:
int tupleID = Convert.ToInt32(GridView1.DataKeys[rowIndex].Values[0]);
来源:来自@ Matt-9000和https://www.mikesdotnetting.com/article/26/parameter-queries-in-asp-net-with-ms-access
的评论