前台的代码是这样子的:
<asp:repeater id="Right" runat="server" EnableViewState="False">
<ItemTemplate>
<asp:Label ID="Label1" Runat="server"></asp:Label>
<asp:CheckBoxList id="CheckBoxList1" runat="server" RepeatDirection="Horizontal" DataTextField="name" DataValueField="id"></asp:CheckBoxList>
<hr />
</ItemTemplate>
</asp:repeater>
后台的代码是这样子的:
private void initRight()
{
if(e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
string SQL_SELECT_RIGHT = "Select id, name From menu";
string SQL_SELECT_SUBRIGHT = "Select name, id From menuitem Where parentid = @parentid";
System.Data.SqlClient.SqlDataReader rdr = SQLHelper.ExecuteReader(SQLHelper.CONN_STRING_NON_DTC, CommandType.Text, SQL_SELECT_RIGHT, null);
//rdr.Read();
//while(rdr.Read())
//{
for(int i = 0; i < Right.Items.Count && rdr.Read(); i ++)
{
Label label = (Label)Right.Items[i].FindControl("Label1");
label.Text = rdr.GetString(1);
System.Data.SqlClient.SqlParameter[] param = new System.Data.SqlClient.SqlParameter[1];
param[0] = new System.Data.SqlClient.SqlParameter("@parentid", SqlDbType.Int);
param[0].Value = rdr.GetInt32(0);
System.Data.SqlClient.SqlDataReader subrdr = SQLHelper.ExecuteReader(SQLHelper.CONN_STRING_NON_DTC, CommandType.Text, SQL_SELECT_SUBRIGHT, param);
CheckBoxList checkBoxList = (CheckBoxList)Right.Items[i].FindControl("CheckBoxList1");
checkBoxList.DataSource = subrdr;
checkBoxList.DataBind();
}
//}
}
}
然后在Page_Load里面调用initRight(),为什么不能过将CheckBoxList绑定数据呢??
谢谢
那时候数据都已经绑定好了
一般要么在repeater的itemdatabound事件里面来写 !你可以单步执行观察到的pageload事件在itemdatabound事件后面执行。
如果要动态绑定都是在itemdatabound里面来写或者itemcreated事件里面写