在gridview上启用和禁用链接按钮(Enable and disable link button on 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; } } }

I wants to enable or disable linkbutton on some rows of gridview based on condition.. Can i enable linkbutton on one row and disable it on another row of same grid view ??my code is here

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; } } }

最满意答案

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

您可能正在将Visible属性用于其他要求,但只是想确认它仅用于显示/隐藏Linkbutton。 要启用/解除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事件中执行相同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; }

Yes you can easily do it in RowdataBound Event, but you have used lnk2.Visible property in your code.

you may be using Visible property for another requirement but just want to confirm you that it is used to show/hide the Linkbutton only. To enable/disble a Linkbutton, use Enabled property of Linkbutton. as:

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

If You want to do it using rowindex, then you can e.Row.RowIndex to find the current row index inside 'RowDatabound` event of gridview. as:

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

If you want to enable/ disable Linkbutton based on value of some other column in the same row, then you can do the same inside Rowdatabound event. as:

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; }

更多推荐