0

これが私の要件です。

私には3つのグループがあり、各グループの下に従業員のセットがありました。

そのため、DataList に 3 つのラベル (グループ名を表示するため) と 3 つのグリッドビュー (各グループの従業員のセットを表示するため) を配置しました。RadioButtons を持つ 3 つの GridViews のすべての行。

ここでの問題は、RadioButton がチェックボックスのように動作し、複数の選択が許可されていることです。

ただし、3 つの Gridviews すべてから RADIOBUTTON を 1 つだけ選択する必要があります。これを達成する方法。誰か助けてくれませんか?

/*********  Displaying Group Name and Its set of employes  **********/

/ * ** 3 つのグループがあるため、このループは 3 回実行されます。 * *** /

protected void dlGraphItemDataBound(object sender, DataListItemEventArgs e)
{
    MyList dataitem = (MyList)e.Item.DataItem;

        if (dataitem != null)
        {
            Label lbl = (Label)e.Item.FindControl("lblMyLabel");
            lbl.Text = dataitem.GroupName;

            GridView dg = (GridView)e.Item.FindControl("gvList");

            if (dg != null)
            {
                List< MyList > groupItem = new List< MyList >(); // List of Employees

                foreach (MyList item in _empList)
                {
                    if (item.GroupName.Equals(dataitem.GroupName))
                 groupItem.Add(item); // Grouping all the emps who had same groupname
                }

             SetupReportGrid(dg); // Method to add controls to gridview dynamically
             dg.SetDataSource(groupItem); //Setting datasource for gridview
            }
        }
    }


protected void onRadioButtonClicked(object sender, EventArgs e)
{           

        foreach (DataListItem dlItem in dlMyDataList.Items)
        {
            GridView grid = (GridView) dlItem.FindControl("gvList");
            if (grid != null)
            {
                RadioButton selectButton = (RadioButton) sender;
                GridViewRow row = (GridViewRow) selectButton.NamingContainer;

                int a = row.RowIndex;

                foreach (GridViewRow gridRow in grid.Rows)
                {
                    RadioButton rd = gridRow.FindControl("rdoSelect") as RadioButton;
                    if (rd.Checked)
                    {
                        if (gridRow.RowIndex == a)
                        {

                            rd.Checked = true;
                        }
                        else
                        {
                            rd.Checked = false;
                        }

                    }
                }
            }
        }

これは私が試した方法です.... 1番目のグリッドビューで最初と2番目のラジオボタンを選択すると、2番目のラジオボタンのイベントの後、1番目と2番目のラジオボタンの両方がオフになりました。ループはすべてのグリッドビューと、ラジオボタンがチェックされていない最後のグリッドに対して実行されます。最後に、私のコードはラジオボタンがチェックされていないという結果になります

グリッド ビュー マークアップ:

<asp:DataList ID="dlMyDataList" runat="server" OnItemDataBound="dlGraphItemDataBound">
                <ItemTemplate>                    
                    <table cellspacing="0" width="100%" >   

                        <tr>                                
                            <td nowrap="nowrap" width="100%" align="left" valign="middle">
                                <asp:Label ID="lblGroupName" runat="server" CssClass="ssrptsublabel" > </asp:Label>                                   
                            </td>
                         </tr>

                        <tr>
                            <td width="100%" nowrap="nowrap" align="left" valign="middle">
                                 <asp:Panel id="pnlReport" runat="server" BorderWidth="0" Width="100%" Wrap="False">
                                    <commoncontrols:MyGridView id="gvList" runat="server" autogeneratecolumns="false" EnableViewState="True">
                                    </commoncontrols:MyGridViewview>
                                 </asp:Panel>                                     
                            </td>                                                        
                        </tr>  
                        </table>                                                      

                </ItemTemplate>
            </asp:DataList>


**// Assigning controls dynamically to grid view
// Having Seperate customized class for gridview, based on that we are adding controls
//

GridViewColumnControl(ControlTypes, Control_ID, CSS Style, 0, databind,"" );**

private void SetupGrid(GridView grid)
    {

        IList<GridViewColumn> columns = new List<GridViewColumn>();

        GridViewColumn gridColumn = new GridViewColumn(ColumnTypes.TemplateColumn, "", 500, HorizontalAlign.Left,null);




       GridViewColumnControl control = new GridViewColumnControl(ControlTypes.RadioButton, "rdoSelect", "labelstyle", 0, null, "");
        control.Visible = false;
        control.AutoPostBack = true;
        control.OnChanged += onRadioButtonClicked;
        gridColumn.AddControl(control);



        control = new GridViewColumnControl(ControlTypes.DropDown, "", "style", 0, null, "");
        control.Visible = false;
        gridColumn.AddControl(control);




        grid.SetColumns(columns);
    }
4

1 に答える 1

0

RadioButton コントロールには、GroupName というプロパティがあります。同じ GroupName を持つすべてのラジオ ボタンは、同じグループに属します。各ラジオ ボタン グループでは、1 つのラジオ ボタンのみを選択できます。したがって、グリッド ビューのすべてのラジオ ボタンにこのプロパティを設定すると、要件を満たすことができると思います。

于 2013-07-27T14:26:30.287 に答える