更改链接按钮文本=批准到#34;在asp.net中批准

时间:2016-06-26 10:19:00

标签: c# asp.net linkbutton

我的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();
                    }

                }

当我点击批准链接按钮时,它会将所有文本更改为已批准。它应该是只会改变的点击按钮。并希望它将永久改为批准。谢谢先生

3 个答案:

答案 0 :(得分:0)

您需要在数据库中保存链接的状态,然后根据状态字段的值,您需要将链接文本设置为approveapproved。使用相同的状态字段,您也可以将其设为readonly

因此,修改数据库表并将新字段添加到当前批准状态。

目前,您没有将其保存到数据库,因此当您重新加载页面时,它将再次恢复到原始状态。

希望它有所帮助。

更新: 您有两个表,即ProductsCustomerProducts。您需要通过运行此查询来更改表并添加类型为bit的新列ApproveStatusAlter 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";
}