在Repeter中用RadioButton生成單選按鈕組的實現

 

我們在運用Repeter綁定數據到RadioButton在前臺生成單選按鈕組的時候,我們可能會遇到生成的按鈕並不能實現單選這種情況,即使你設置了GroupName屬性,也不會起作用。這時我們就要藉助於我們強大的JS了。代碼如下:

前臺Repeter部分代碼:

<asp:Repeater ID="RepeaterYM" runat="server">                        <ItemTemplate>                            <li>                                <asp:RadioButton ID="Year" Text='<%#Eval("Years")%>' runat="server" GroupName="Year"                                    ClientIDMode="Static" οnclick="selectSingleRadio(this,'Year');" />年<asp:DropDownList                                        ID="MonthList" name="Month" Width="120" runat="server" ClientIDMode="Static">                                        <asp:ListItem>全部</asp:ListItem>                                    </asp:DropDownList>                            </li>                        </ItemTemplate>                    </asp:Repeater>

生成的單選按鈕組源碼及Dome:

  <ul>                                                <li>                                <input id="Year" type="radio" name="RepeaterYM$ctl00$Year" value="Year" οnclick="selectSingleRadio(this,'Year');" /><label for="Year">2001</label>年<select name="RepeaterYM$ctl00$MonthList" id="MonthList" name="Month" style="width:120px;">	<option value="0">全部</option>	<option value="10">10月</option> </select>                            </li>                                                    <li>                                <input id="Year" type="radio" name="RepeaterYM$ctl01$Year" value="Year" οnclick="selectSingleRadio(this,'Year');" /><label for="Year">2005</label>年<select name="RepeaterYM$ctl01$MonthList" id="MonthList" name="Month" style="width:120px;">	<option value="0">全部</option>	<option value="6">6月</option> </select>                            </li>                                                    <li>                                <input id="Year" type="radio" name="RepeaterYM$ctl02$Year" value="Year" οnclick="selectSingleRadio(this,'Year');" /><label for="Year">2006</label>年<select name="RepeaterYM$ctl02$MonthList" id="MonthList" name="Month" style="width:120px;">	<option value="0">全部</option>	<option value="2">2月</option>	<option value="3">3月</option>	<option value="5">5月</option>	<option value="6">6月</option>	<option value="12">12月</option> </select>                            </li>                                                    <li>                                <input id="Year" type="radio" name="RepeaterYM$ctl03$Year" value="Year" οnclick="selectSingleRadio(this,'Year');" /><label for="Year">2007</label>年<select name="RepeaterYM$ctl03$MonthList" id="MonthList" name="Month" style="width:120px;">	<option value="0">全部</option>	<option value="11">11月</option> </select>                            </li>                                                    <li>                                <input id="Year" type="radio" name="RepeaterYM$ctl04$Year" value="Year" οnclick="selectSingleRadio(this,'Year');" /><label for="Year">2008</label>年<select name="RepeaterYM$ctl04$MonthList" id="MonthList" name="Month" style="width:120px;">	<option value="0">全部</option>	<option value="1">1月</option>	<option value="6">6月</option> </select>                            </li>                                                    <li>                                <input id="Year" type="radio" name="RepeaterYM$ctl05$Year" value="Year" οnclick="selectSingleRadio(this,'Year');" /><label for="Year">2009</label>年<select name="RepeaterYM$ctl05$MonthList" id="MonthList" name="Month" style="width:120px;">	<option value="0">全部</option>	<option value="11">11月</option>	<option value="12">12月</option> </select>                            </li>                                                    <li>                                <input id="Year" type="radio" name="RepeaterYM$ctl06$Year" value="Year" οnclick="selectSingleRadio(this,'Year');" /><label for="Year">2010</label>年<select name="RepeaterYM$ctl06$MonthList" id="MonthList" name="Month" style="width:120px;">	<option value="0">全部</option>	<option value="2">2月</option>	<option value="3">3月</option>	<option value="4">4月</option>	<option value="7">7月</option>	<option value="8">8月</option>	<option value="9">9月</option>	<option value="12">12月</option> </select>                            </li>                                                    <li>                                <input id="Year" type="radio" name="RepeaterYM$ctl07$Year" value="Year" οnclick="selectSingleRadio(this,'Year');" /><label for="Year">2011</label>年<select name="RepeaterYM$ctl07$MonthList" id="MonthList" name="Month" style="width:120px;">	<option value="0">全部</option>	<option value="1">1月</option>	<option value="5">5月</option>	<option value="6">6月</option>	<option value="7">7月</option>	<option value="10">10月</option>	<option value="11">11月</option>	<option value="12">12月</option> </select>                            </li>                                        </ul>

 

 

實現單選效果的JS事件:

View Code
 //讓repeter生成的radio組爲單選
    function selectSingleRadio(rbtn, GroupName) {
        $("input[type=radio]").each(function (i) {
            if (this.name.substring(this.name.length - GroupName.length) == GroupName) {
                this.checked = false;
            }
        })
        rbtn.checked = true;
    }

我們現在來看看在後臺是如何來遍歷Repeter來加載相應組中控件的值的,代碼如下:

 //獲得所有年月
        void LoadData()
        {
            NewLand dataYTD = new NewLand(-1, 0);
            DataSet ds = NewLandReportAdapter.Instance.GetData(dataYTD);
            //篩選出不重複的年份
            DataTable result = ds.Tables[0].DefaultView.ToTable(true, "Years");
            RepeaterYM.DataSource = result;
            RepeaterYM.DataBind();
            //遍歷RepeaterYM.加載各年的月份
            foreach (RepeaterItem item in RepeaterYM.Items)
            {
                RadioButton year = (RadioButton)item.FindControl("Year");
                string yearNow = year.Text;
                DataView dv = ds.Tables[0].DefaultView;
                dv.RowFilter = "Years=" + yearNow;
                DataTable dt = dv.ToTable();
                DropDownList monthlist = (DropDownList)item.FindControl("MonthList");
                monthlist.DataSource = dt;
                monthlist.DataTextField = "Months";
                monthlist.DataValueField = "Months";
                monthlist.DataTextFormatString = "{0}月";
                monthlist.DataBind();
                monthlist.Items.Insert(0, new ListItem("全部", "0"));
            }
        }

最後再看看,後臺如何獲得前臺選中按扭的值:

  //根據所選擇的年份和月份生成報表        protected void SelectData_Click(object sender, EventArgs e)        {            string year = string.Empty;            string month = string.Empty;            //遍歷Repeater 獲得選中控件的值            foreach (RepeaterItem item in RepeaterYM.Items)            {                         RadioButton yearbtn = (RadioButton)item.FindControl("Year");                if (yearbtn.Checked)                {                    year = yearbtn.Text;//取得選中的年份                    DropDownList monthlist = (DropDownList)item.FindControl("MonthList");//獲得選中的月份                    month = monthlist.SelectedValue;                             }            }      }

 



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章