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

是的,您可以在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; }