在gridview上启用和禁用链接按钮

时间:2013-06-20 07:04:33

标签: c# asp.net gridview

我想根据条件在gridview的某些行上启用或禁用linkbutton ..我可以在一行上启用linkbutton并在同一网格视图的另一行上禁用它吗?我的代码在这里

  protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{LinkButton lnk2 = (LinkButton)e.Row.FindControl("LinkButton2");
    if (e.Row.RowType == DataControlRowType.DataRow)
    {

        SqlCommand cmd12 = new SqlCommand("Select testsession_status from student_vs_testsession_details where  testsession_id='" + v_testid.Text + "' ", con12);
        SqlDataReader dr12 = cmd12.ExecuteReader();
        while (dr12.Read())
        {
            string test_status = dr12[0].ToString();
            LinkButton lnk2 = (LinkButton)e.Row.FindControl("LinkButton2");
            foreach (GridViewRow row in GridView1.Rows)
            {
                if (v_testtype == "Theory Test" && test_status == "Completed")
                {
                    lnk2.Visible = true;
                }
                else
                {
                    lnk2.Visible = false;
                }

            }




        }

2 个答案:

答案 0 :(得分:5)

是的,您可以在RowdataBound事件中轻松完成,但您在代码中使用了lnk2.Visible属性。

您可能正在使用Visible属性作为其他要求,但只想确认它仅用于显示/隐藏链接按钮。要启用/解除Linkbutton,请使用Linkbutton的Enabled属性。为:

lnk2.Enabled = true;// to enable linkbutton.
lnk2.Enabled = false;// to disable linkbutton.

如果你想使用rowindex来做,那么你可以e.Row.RowIndex在gridview的'RowDatabound`事件中找到当前行索引。为:

if(e.Row.RowIndex==2)
{
  LinkButton lnk2 = (LinkButton)e.Row.FindControl("LinkButton2");
  lnk2.Enabled=false;
}

如果要根据同一行中某些其他列的值启用/禁用Linkbutton,则可以在Rowdatabound事件内执行相同操作。为:

string Namecolumnvalue = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "Name"));
LinkButton lnk2 = (LinkButton)e.Row.FindControl("LinkButton2");
if(Namecolumnvalue =="Disable")
{      
  lnk2.Enabled=false;
}
else{
  lnk2.Enabled=true;
}

答案 1 :(得分:0)

    --------aspx page code---------

     <asp:GridView ID="gvLibrary" runat="server" AutoGenerateColumns="False" Width="100%" DataKeyNames="LibMstRefNo"
                        EmptyDataText="No Client Found" CssClass="table table-striped table-bordered" OnRowDataBound="gvLibrary_RowDataBound">
                        <Columns>
     <asp:TemplateField HeaderText="Issue">
                            <ItemTemplate>
                               <asp:LinkButton ID="lnkIssue" runat="server" Text="Issue" OnClick="lnkIssue_Click"></asp:LinkButton>
                            </ItemTemplate>
                            <HeaderStyle HorizontalAlign="Left" />
                                <ItemStyle HorizontalAlign="Left" />
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Receive">
                            <ItemTemplate>
                               <asp:LinkButton ID="lnkReceive" runat="server" Text="Receive" OnClick="lnkReceive_Click" OnClientClick="return confirm('Are you Sure?')"></asp:LinkButton>
                            </ItemTemplate>
                            <HeaderStyle HorizontalAlign="Left" />
                                <ItemStyle HorizontalAlign="Left" />
                        </asp:TemplateField>
                    </Columns>

</asp:GridView>


    ------------aspx.cs page code------------------

 protected void gvLibrary_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            string nbps = e.Row.Cells[8].Text;
            if(nbps== "&nbsp;")
            {
                nbps = "";
            }
            else
            {
                nbps = e.Row.Cells[8].Text;
            }
            if (nbps == "")
            {
                LinkButton btn = (LinkButton)e.Row.FindControl("lnkissue");
                LinkButton btn1 = (LinkButton)e.Row.FindControl("lnkReceive");
                btn.Enabled = true;
                btn1.Enabled = false;
                btn1.ForeColor = System.Drawing.Color.Red;

            }
            else
            {
                LinkButton btn = (LinkButton)e.Row.FindControl("lnkissue");
                LinkButton btn1 = (LinkButton)e.Row.FindControl("lnkReceive");
                btn.Enabled = false;
                btn.ForeColor = System.Drawing.Color.Red;
                btn1.Enabled = true;
            }

        }
    }

enter image description here