在网格视图中查找控件?

问题描述:

在我的应用我想获得的复选框这是我使用foreach控制在GridView但shoing空,这是我code./ ..在网格视图中查找控件?

“> '可见= “假”> '> ' 的TextMode = “多”> '> ' 的TextMode = “多”>
'> '/>

公共无效getPlaylist()//我写的方法中的发现控制 { MyplalistBL clsMyplalstBl =新MyplalistBL(); clsMyplalstBl.Userid = Session [“userid”]。ToString(); DataSet ds = clsMyplalstBl.getPlaylistBl(); 如果(ds.Tables [0] .Rows.Count> 0){

 grdplaylist .DataSource =ds.Tables [0]; 
     grdplaylist.DataBind(); 

     foreach (GridViewRow gr in grdplaylist.Rows) 
     { 
      CheckBox ch = (CheckBox)gr.FindControl("chksett"); 
      string s = ds.Tables[0].Rows[0]["settings"].ToString(); 

      if (s == "P") 
      { 
       ch.Checked = true; 
      } 
      else if (s == "PV") 
      { 
       ch.Checked = false; 
      } 


     } 


    } 
    else 
    { 
     grdplaylist.DataSource = null; 
     grdplaylist.DataBind(); 

    } 
} 
+0

我会清楚地在我的gridview的讲解复选框是存在的。当它是“P”时应该检查复选框并且当它是来自数据库的“PV”时不检查。我怎么能够。如何可以声明的复选框中网格我声明这样 的'/> 是它正确 – 2010-02-17 06:37:00

嗯,这是有趣的... 看起来,你想从数据库中加载您的复选框的状态,所以 ,你应该做的是,改变你的代码,以网格视图的数据绑定事件,如果你想检查表基于价值的复选框就可以使用Row_DataBound事件

protected void GridView1_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow & (e.Row.RowState == DataControlRowState.Normal | e.Row.RowState == DataControlRowState.Alternate)) { 
        CheckBox cb = (CheckBox)e.Row.FindControl("CheckBoc1"); 
        string s= ((DataRowView)e.Row.DataItem).Row("settings"); 
        if (s== "P") { 
            cb.Checked = true; 
        } 
        else if (s== "PV") { 
            cb.Checked = false; 
        } 
    } 
} 
+0

是正好Mr.Lakhalani PRASHANT。 – 2010-02-17 06:41:49

+0

你需要在数据绑定事件来检查ROWTYPE否则它可能会抛出了一个异常,如果ü尝试找到在页眉或页脚中的复选框(如果将GridView有一个) – 2010-02-17 06:45:42

这看起来是正确的,你应该是这样的:

foreach (GridViewRow row in GridView1.Rows) 
{ 
    string dropDownListText = ((DropDownList)row.FindControl("DropDownList1")).SelectedItem.Value; 
} 

对于标记:

<ItemTemplate> 
<asp:DropDownList ID="DropDownList1" DataTextField="Name" DataValueField = "Name" DataSource= '<%# BindDropDownList() %>' runat="server"> 
</asp:DropDownList> 
</ItemTemplate> 

所以我会尽量确保您的命名是正确的。确保你确实把它命名为“chksett”。

如果这行不通,请将其移动到RowBound或ItemBound事件。

将开始工作

+0

确定我会尝试,并告知您 – 2010-02-17 06:44:40

+0

这里有一个体面的样本有一个复选框,可能是类似于您的情况:http://highoncoding.com/Articles/81_Selecting_Checkboxes_inside_GridView_Control.aspx – 2010-02-17 06:55:57

你也可以这样做:

foreach (GridViewRow gr in grdplaylist.Rows) 
     { 
      CheckBox ch = (CheckBox)gr[gr.RowIndex].FindControl("chksett"); 
      string s = ds.Tables[0].Rows[0]["settings"].ToString(); 

      if (s == "P") 
      { 
       ch.Checked = true; 
      } 
      else if (s == "PV") 
      { 
       ch.Checked = false; 
      } 
     }