我的html中有这个:
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="btnApprove" runat="server" Text="Approve" CommandName="Approve" CommandArgument='<%# Eval("ProductID") %>' />
</ItemTemplate>
</asp:TemplateField>
这是我背后的代码:
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
foreach (GridViewRow row in GridView1.Rows)
{
if (row.RowType == DataControlRowType.DataRow)
{
CheckBox chkRow = (row.Cells[0].FindControl("chkCtrl") as CheckBox);
LinkButton link = ((LinkButton)GridView1.FindControl("btnApprove"));
if (chkRow.Checked)
{
using (SqlConnection scn = new SqlConnection("Data Source = 'PAULO'; Initial Catalog=ShoppingCartDB;Integrated Security =True"))
{
scn.Open();
SqlCommand cmd = new SqlCommand("update o set o.Updatedproduct = p.ProductQuantity - o.Totalproduct from CustomerProducts o inner join Products p on o.ProductID = p.ProductID WHERE o.CustomerID=@CustomerID", scn);
cmd.Parameters.AddWithValue("@CustomerID", SqlDbType.Int).Value = row.Cells[0].Text;
cmd.ExecuteNonQuery();
link.Text = "Approved";
GridView1.DataBind();
}
}
}
}
我想要发生的是在我点击approve link button
之后,它将执行其功能,然后将链接按钮文本更改为已批准,如果可能,将其更改为只读状态。
我尝试过link.Enabled
,但似乎没有阅读它。 Link.Text="Approved
也没有做到这一点。有什么窍门吗?非常感谢你
更新:
foreach (GridViewRow row in GridView1.Rows)
{
if (row.RowType == DataControlRowType.DataRow)
{
CheckBox chkRow = (row.Cells[0].FindControl("chkCtrl") as CheckBox);
LinkButton link = row.Cells[8].FindControl("btnApprove") as LinkButton;
if (link != null)
link.Text = "Approved";
if (chkRow.Checked)
{
using (SqlConnection scn = new SqlConnection("Data Source = 'PAULO'; Initial Catalog=ShoppingCartDB;Integrated Security =True"))
{
scn.Open();
SqlCommand cmd = new SqlCommand("update o set o.Updatedproduct = p.ProductQuantity - o.Totalproduct from CustomerProducts o inner join Products p on o.ProductID = p.ProductID WHERE o.CustomerID=@CustomerID", scn);
cmd.Parameters.AddWithValue("@CustomerID", SqlDbType.Int).Value = row.Cells[0].Text;
cmd.ExecuteNonQuery();
//link.Text = "Approved";
Label1.Visible = true;
GridView1.DataBind();
}
}
当我点击批准链接按钮时,它会将所有文本更改为已批准。它应该是只会改变的点击按钮。并希望它将永久改为批准。谢谢先生
答案 0 :(得分:0)
您需要在数据库中保存链接的状态,然后根据状态字段的值,您需要将链接文本设置为approve
或approved
。使用相同的状态字段,您也可以将其设为readonly
。
因此,修改数据库表并将新字段添加到当前批准状态。
目前,您没有将其保存到数据库,因此当您重新加载页面时,它将再次恢复到原始状态。
希望它有所帮助。
更新:
您有两个表,即Products
和CustomerProducts
。您需要通过运行此查询来更改表并添加类型为bit的新列ApproveStatus
。
Alter table CustomerProducts add ApproveStatus bit null
。
现在,在您的选择查询中,您需要包含此列ApproveStatus
并修改您的GridView
代码。
在您的代码
后面添加此代码protected string GetApprovalStatus(object value)
{
if(Convert.ToBoolean(value))
return "Approved";
else
return "Approve";
}
修改您的GridView
模板以供审批LinkButton
。
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="btnApprove" runat="server" Text="<%=this.GetApprovalStatus(Eval("ApproveStatus"));%>" CommandName="Approve" CommandArgument='<%# Eval("ProductID") %>' />
</ItemTemplate>
现在,您需要在代码后面更改此行:
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
bool status = false;
foreach (GridViewRow row in GridView1.Rows)
{
if (row.RowType == DataControlRowType.DataRow)
{
CheckBox chkRow = (row.Cells[0].FindControl("chkCtrl") as CheckBox);
LinkButton link = ((LinkButton)GridView1.FindControl("btnApprove"));
if (chkRow.Checked)
{
if(link.Text == "Approved")
{
status = true;
}
else
{
status = false;
}
using (SqlConnection scn = new SqlConnection("Data Source = 'PAULO'; Initial Catalog=ShoppingCartDB;Integrated Security =True"))
{
scn.Open();
SqlCommand cmd = new SqlCommand("update o set o.Updatedproduct = p.ProductQuantity - o.Totalproduct, o.ApproveStatus = @status from CustomerProducts o inner join Products p on o.ProductID = p.ProductID WHERE o.CustomerID=@CustomerID", scn);
cmd.Parameters.AddWithValue("@CustomerID", SqlDbType.Int).Value = row.Cells[0].Text;
cmd.Parameters.AddWithValue("@status", status)
cmd.ExecuteNonQuery();
GridView1.DataBind();
}
}
}
}
答案 1 :(得分:0)
您找到LinkButton
控件的方式是错误的。它应该如下。同样,该单元格号0
就是一个例子。你应该输入正确的手机号码。
LinkButton link = row.Cells[0].FindControl("btnApprove") as LinkButton;
if(link != null)
link.Text = "Approved";
答案 2 :(得分:0)
假设在单击链接按钮后,网格中的数据会刷新(语法可能不太正确,仍然会醒来!)
诀窍是在数据库中有一个可以再次读出的字段,显示标签可以操作的新状态。
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="btnApprove" runat="server" Text="<%=this.getText(Eval("some_DB_trigger_flag"));%>" CommandName="Approve" CommandArgument='<%# Eval("ProductID") %>' />
</ItemTemplate>
</asp:TemplateField>
并在您的代码中;
protected string getText(int value)
{
if(value==0) then return "Approved";
else return "Other";
}