关于CheckBoxList和RadioButtonList的几个问题
生活随笔
收集整理的這篇文章主要介紹了
关于CheckBoxList和RadioButtonList的几个问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
其實我一向很少用關于"list"的控件,因為有DataGrid就基本上都搞定了,然而一方面是為了學習,另一方面也可以靈活的應用更多的控件,于是采用了其中的幾個控件,但沒想到結果令我大失所望。。。。
先看看DataList控件,它的使用最郁悶的是不能在IDE環(huán)境里綁定數據,而只能用模板(不知道是不是我沒學會)。
????????????????????<asp:DataList?id="DataList1"?runat="server"?Width="100%"?Visible="False"?CssClass="s_verdana"
????????????????????????RepeatDirection="Horizontal"?ForeColor="Black"?BorderColor="#999999"?BorderStyle="Solid"?BackColor="Silver"
????????????????????????CellPadding="1"?GridLines="Vertical"?BorderWidth="1px"?RepeatColumns="4"?DataKeyField="c_id">
????????????????????????<SelectedItemStyle?Font-Bold="True"?ForeColor="White"?BackColor="#000099"></SelectedItemStyle>
????????????????????????<AlternatingItemStyle?BackColor="#CCCCCC"></AlternatingItemStyle>
????????????????????????<ItemTemplate>
????????????????????????????<asp:CheckBox?Runat="server"?Text='<%#?DataBinder.Eval(Container,?"DataItem.c_loginName")%>'>
????????????????????????????</asp:CheckBox>
????????????????????????</ItemTemplate> 數據綁定: ????????????this.DataList1.DataSource????=?m_table.DefaultView;
????????????this.DataList1.DataKeyField????=?"c_id";
????????????this.DataList1.DataBind(); 看上去和DataGrid一樣不是嗎?可問題是:這里我這里使用了CheckBox,也就是說用戶到時候要選擇其中的部份數據,然后提交回來,結果是:你很難得在DataGrid里取回綁定的數據列。。。。。
再看RadioButtonList:
????????????????<asp:RadioButtonList?id="RadioButtonList_MsgType"?runat="server"?Width="440px"?RepeatDirection="Horizontal"
????????????????????CssClass="s_verdana">
????????????????????<asp:ListItem?Value="0"?Selected="True">All</asp:ListItem>
????????????????????<asp:ListItem?Value="1">All?Client</asp:ListItem>
????????????????????<asp:ListItem?Value="2">All?Users</asp:ListItem>
????????????????????<asp:ListItem?Value="3">Sperical</asp:ListItem>
????????????????</asp:RadioButtonList> 這里我只使用了靜態(tài)的數據,因為這里并沒有很多的數據顯示。但有一點小問題:我想在上面加一個JavaScript事件,用來響應用戶操作,于是我在后臺添加代碼:
????????private?void?RadioButtonList_MsgType_Load(object?sender,?System.EventArgs?e)
????????{
????????????RadioButtonList m_obj?= sender as RadioButtonList;
????????????m_obj.Attributes.Add("onclick","alert()");
????????} 讓我郁悶不以的是:::它并沒有在radio添加Onclick事件,查看HTML源代碼,差點沒把我氣死:原來它生成了一個Table,而這個RadioButtonList就是這個Table,而里面的Radio就是行與列了。 <table id="Inc_Admin_MsgManager1_Inc_WAVE_Messages1_RadioButtonList_MsgType" class="s_verdana" οnclick="alert()" border="0" style="width:440px;">
????<tr>
????????<td><input?id="Inc_Admin_MsgManager1_Inc_WAVE_Messages1_RadioButtonList_MsgType_0"?type="radio"?name="Inc_Admin_MsgManager1:Inc_WAVE_Messages1:RadioButtonList_MsgType"?value="0"?/><label?for="Inc_Admin_MsgManager1_Inc_WAVE_Messages1_RadioButtonList_MsgType_0">All</label></td><td><input?id="Inc_Admin_MsgManager1_Inc_WAVE_Messages1_RadioButtonList_MsgType_1"?type="radio"?name="Inc_Admin_MsgManager1:Inc_WAVE_Messages1:RadioButtonList_MsgType"?value="1"?/><label?for="Inc_Admin_MsgManager1_Inc_WAVE_Messages1_RadioButtonList_MsgType_1">All?Client</label></td><td><input?id="Inc_Admin_MsgManager1_Inc_WAVE_Messages1_RadioButtonList_MsgType_2"?type="radio"?name="Inc_Admin_MsgManager1:Inc_WAVE_Messages1:RadioButtonList_MsgType"?value="2"?/><label?for="Inc_Admin_MsgManager1_Inc_WAVE_Messages1_RadioButtonList_MsgType_2">All?Users</label></td><td><input?id="Inc_Admin_MsgManager1_Inc_WAVE_Messages1_RadioButtonList_MsgType_3"?type="radio"?name="Inc_Admin_MsgManager1:Inc_WAVE_Messages1:RadioButtonList_MsgType"?value="3"?checked="checked"?/><label?for="Inc_Admin_MsgManager1_Inc_WAVE_Messages1_RadioButtonList_MsgType_3">Sperical</label></td>
????</tr>
</table> 這也算了,如果非要這樣用也行,可以在它的子控件里再添加事件,這樣可是麻煩多了。看看CheckBoxList,原理也一樣,也就不多說了。
回到DataList上來,看它如果用CheckBox來取回數據吧,先把所有的子控件都列出來: ????????private?void?AddMessageRelations()
????????{
????????????if(this.RadioButtonList_MsgType.SelectedIndex<3)?return;
????????????CheckBox?m_checkBox;
????????????for(int?i=0;i<this.DataList1.Items.Count;i++)
????????????{
//????????????????m_checkBox?=?this.DataList1.Items[i].Controls[0]?as?CheckBox;
//????????????????if(m_checkBox.Checked)
//????????????????{
//????????????????????Response.Write(m_checkBox.Text);
//????????????????}
????????????????Response.Write("i="+i.ToString()+":"+this.DataList1.Items[i].ToString()+"<br/>");
????????????????for(int?j=0;j<this.DataList1.Items[i].Controls.Count;j++)
????????????????{
????????????????????Response.Write("j="+j.ToString()+":"+?this.DataList1.Items[i].Controls[j].ToString()+"<br/>");
????????????????}
????????????????Response.Write("<br>==================================<br>");
????????????}
????????} 看看結果:
好了,清楚是怎么回事了就好辦了。以下代碼取得用戶選定CheckBox的ID值。 ????????private?void?AddMessageRelations()
????????{
????????????if(this.RadioButtonList_MsgType.SelectedIndex<3)?return;
????????????CheckBox?m_checkBox;
????????????for(int?i=0;i<this.DataList1.Items.Count;i++)
????????????{
????????????????m_checkBox?=?this.DataList1.Items[i].Controls[1]?as?CheckBox;
????????????????if(m_checkBox.Checked)
????????????????{
????????????????????Response.Write(this.DataList1.DataKeys[i].ToString()+":"+m_checkBox.Text+"<br>");
????????????????}
//????????????????Response.Write("i="+i.ToString()+":"+this.DataList1.Items[i].ToString()+"<br/>");
//????????????????for(int?j=0;j<this.DataList1.Items[i].Controls.Count;j++)
//????????????????{
//????????????????????Response.Write("j="+j.ToString()+":"+?this.DataList1.Items[i].Controls[j].ToString()+"<br/>");
//????????????????}
//????????????????Response.Write("<br>==================================<br>");
????????????}
????????}
先看看DataList控件,它的使用最郁悶的是不能在IDE環(huán)境里綁定數據,而只能用模板(不知道是不是我沒學會)。
????????????????????<asp:DataList?id="DataList1"?runat="server"?Width="100%"?Visible="False"?CssClass="s_verdana"
????????????????????????RepeatDirection="Horizontal"?ForeColor="Black"?BorderColor="#999999"?BorderStyle="Solid"?BackColor="Silver"
????????????????????????CellPadding="1"?GridLines="Vertical"?BorderWidth="1px"?RepeatColumns="4"?DataKeyField="c_id">
????????????????????????<SelectedItemStyle?Font-Bold="True"?ForeColor="White"?BackColor="#000099"></SelectedItemStyle>
????????????????????????<AlternatingItemStyle?BackColor="#CCCCCC"></AlternatingItemStyle>
????????????????????????<ItemTemplate>
????????????????????????????<asp:CheckBox?Runat="server"?Text='<%#?DataBinder.Eval(Container,?"DataItem.c_loginName")%>'>
????????????????????????????</asp:CheckBox>
????????????????????????</ItemTemplate> 數據綁定: ????????????this.DataList1.DataSource????=?m_table.DefaultView;
????????????this.DataList1.DataKeyField????=?"c_id";
????????????this.DataList1.DataBind(); 看上去和DataGrid一樣不是嗎?可問題是:這里我這里使用了CheckBox,也就是說用戶到時候要選擇其中的部份數據,然后提交回來,結果是:你很難得在DataGrid里取回綁定的數據列。。。。。
再看RadioButtonList:
????????????????<asp:RadioButtonList?id="RadioButtonList_MsgType"?runat="server"?Width="440px"?RepeatDirection="Horizontal"
????????????????????CssClass="s_verdana">
????????????????????<asp:ListItem?Value="0"?Selected="True">All</asp:ListItem>
????????????????????<asp:ListItem?Value="1">All?Client</asp:ListItem>
????????????????????<asp:ListItem?Value="2">All?Users</asp:ListItem>
????????????????????<asp:ListItem?Value="3">Sperical</asp:ListItem>
????????????????</asp:RadioButtonList> 這里我只使用了靜態(tài)的數據,因為這里并沒有很多的數據顯示。但有一點小問題:我想在上面加一個JavaScript事件,用來響應用戶操作,于是我在后臺添加代碼:
????????private?void?RadioButtonList_MsgType_Load(object?sender,?System.EventArgs?e)
????????{
????????????RadioButtonList m_obj?= sender as RadioButtonList;
????????????m_obj.Attributes.Add("onclick","alert()");
????????} 讓我郁悶不以的是:::它并沒有在radio添加Onclick事件,查看HTML源代碼,差點沒把我氣死:原來它生成了一個Table,而這個RadioButtonList就是這個Table,而里面的Radio就是行與列了。 <table id="Inc_Admin_MsgManager1_Inc_WAVE_Messages1_RadioButtonList_MsgType" class="s_verdana" οnclick="alert()" border="0" style="width:440px;">
????<tr>
????????<td><input?id="Inc_Admin_MsgManager1_Inc_WAVE_Messages1_RadioButtonList_MsgType_0"?type="radio"?name="Inc_Admin_MsgManager1:Inc_WAVE_Messages1:RadioButtonList_MsgType"?value="0"?/><label?for="Inc_Admin_MsgManager1_Inc_WAVE_Messages1_RadioButtonList_MsgType_0">All</label></td><td><input?id="Inc_Admin_MsgManager1_Inc_WAVE_Messages1_RadioButtonList_MsgType_1"?type="radio"?name="Inc_Admin_MsgManager1:Inc_WAVE_Messages1:RadioButtonList_MsgType"?value="1"?/><label?for="Inc_Admin_MsgManager1_Inc_WAVE_Messages1_RadioButtonList_MsgType_1">All?Client</label></td><td><input?id="Inc_Admin_MsgManager1_Inc_WAVE_Messages1_RadioButtonList_MsgType_2"?type="radio"?name="Inc_Admin_MsgManager1:Inc_WAVE_Messages1:RadioButtonList_MsgType"?value="2"?/><label?for="Inc_Admin_MsgManager1_Inc_WAVE_Messages1_RadioButtonList_MsgType_2">All?Users</label></td><td><input?id="Inc_Admin_MsgManager1_Inc_WAVE_Messages1_RadioButtonList_MsgType_3"?type="radio"?name="Inc_Admin_MsgManager1:Inc_WAVE_Messages1:RadioButtonList_MsgType"?value="3"?checked="checked"?/><label?for="Inc_Admin_MsgManager1_Inc_WAVE_Messages1_RadioButtonList_MsgType_3">Sperical</label></td>
????</tr>
</table> 這也算了,如果非要這樣用也行,可以在它的子控件里再添加事件,這樣可是麻煩多了。看看CheckBoxList,原理也一樣,也就不多說了。
回到DataList上來,看它如果用CheckBox來取回數據吧,先把所有的子控件都列出來: ????????private?void?AddMessageRelations()
????????{
????????????if(this.RadioButtonList_MsgType.SelectedIndex<3)?return;
????????????CheckBox?m_checkBox;
????????????for(int?i=0;i<this.DataList1.Items.Count;i++)
????????????{
//????????????????m_checkBox?=?this.DataList1.Items[i].Controls[0]?as?CheckBox;
//????????????????if(m_checkBox.Checked)
//????????????????{
//????????????????????Response.Write(m_checkBox.Text);
//????????????????}
????????????????Response.Write("i="+i.ToString()+":"+this.DataList1.Items[i].ToString()+"<br/>");
????????????????for(int?j=0;j<this.DataList1.Items[i].Controls.Count;j++)
????????????????{
????????????????????Response.Write("j="+j.ToString()+":"+?this.DataList1.Items[i].Controls[j].ToString()+"<br/>");
????????????????}
????????????????Response.Write("<br>==================================<br>");
????????????}
????????} 看看結果:
好了,清楚是怎么回事了就好辦了。以下代碼取得用戶選定CheckBox的ID值。 ????????private?void?AddMessageRelations()
????????{
????????????if(this.RadioButtonList_MsgType.SelectedIndex<3)?return;
????????????CheckBox?m_checkBox;
????????????for(int?i=0;i<this.DataList1.Items.Count;i++)
????????????{
????????????????m_checkBox?=?this.DataList1.Items[i].Controls[1]?as?CheckBox;
????????????????if(m_checkBox.Checked)
????????????????{
????????????????????Response.Write(this.DataList1.DataKeys[i].ToString()+":"+m_checkBox.Text+"<br>");
????????????????}
//????????????????Response.Write("i="+i.ToString()+":"+this.DataList1.Items[i].ToString()+"<br/>");
//????????????????for(int?j=0;j<this.DataList1.Items[i].Controls.Count;j++)
//????????????????{
//????????????????????Response.Write("j="+j.ToString()+":"+?this.DataList1.Items[i].Controls[j].ToString()+"<br/>");
//????????????????}
//????????????????Response.Write("<br>==================================<br>");
????????????}
????????}
轉載于:https://www.cnblogs.com/WuCountry/archive/2006/02/09/327746.html
總結
以上是生活随笔為你收集整理的关于CheckBoxList和RadioButtonList的几个问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android手机评测,Android手
- 下一篇: 59s计时器C语言程序步骤详解,51单片