如何根据数据库的列值检查gridview中的单选按钮

时间:2013-04-03 14:18:38

标签: c# asp.net data-binding gridview radio-button

我在我的aspx页面中使用了gridview。因为我在单个单元格中有五个单选按钮,水平对齐。

<asp:GridView ID="CrowdRatingGrid" runat="server" AutoGenerateColumns="false" AllowPaging="true" PageSize="4" OnPageIndexChanging="CrowdRatingGrid_PageIndexChanging" ViewStateMode="Enabled">

<PagerSettings Mode="Numeric" PageButtonCount="4" />
<Columns>

  <asp:BoundField DataField="idea_id" HeaderText="Idea ID"></asp:BoundField>

  <asp:TemplateField>
   <HeaderTemplate>
    Rating<br />1 2 3 4 5
    </HeaderTemplate>
    <ItemTemplate>

                    <asp:RadioButton runat="server" GroupName="rating" ID="1" />

                    <asp:RadioButton runat="server" GroupName="rating" ID="2" />

                    <asp:RadioButton runat="server" GroupName="rating" ID="3" />

                    <asp:RadioButton runat="server" GroupName="rating" ID="4" />

                    <asp:RadioButton runat="server" GroupName="rating" ID="5" />
     </ItemTemplate>
     </asp:TemplateField>
    </Columns>
    </asp:GridView>

这是我的数据库表结构:

idea_id   rating_id
23882     3
23883     5
63720     1

这是我用于绑定gridview数据的代码隐藏代码:

protected void Page_Load(object sender, EventArgs e)
    {

        if (!IsPostBack)
        {
            BindCrowdRatingGrid();
        }
    }
    private void BindCrowdRatingGrid()
    {

        Campaigns campaign = new Campaigns();
         ObjectResult<GetCrowdRating_Result> resultList = campaign.GetCrowdRatingIdeas();

        CrowdRatingGrid.DataSource = resultList;
        CrowdRatingGrid.DataBind();

    }

我在标题“Idea ID”下的网格中正确显示“idea_id”值 此外,我需要根据rating_id的值检查radiobutton ..如果rating_id为3,我需要检查3以下的无线电按钮,如果1个1以下的无线电按钮被剔除..

如何实现这一目标?

4 个答案:

答案 0 :(得分:3)

尝试将RadioButtonList放入ItemTemplate中:

<asp:RadioButtonList runat="server' ID="Rating" 
    SelectedValue='<%# Bind("rating_id") %>' RepeatDirection="Horizontal" >
    <asp:ListItem Value="1" />
    <asp:ListItem Value="2" />
    <asp:ListItem Value="3" />
    <asp:ListItem Value="4" />
    <asp:ListItem Value="5" />
</asp:RadioButtonList>

要从每个radiobutton中删除文本,请为每个ListItem设置空Text个。要隐藏ListItem的值为0,您可以在RadioButtonList上设置RepeatLayout="Flow"并设置一些CssClass属性值,如下所示:CssClass="rating"。然后将此样式规则添加到页面上:

.rating > input:first-child
{
    display: none;
}

另外作为另一个选项,你可以使用RadioButtonList的SelectedIndex属性而不是SelectedValue,并在绑定到1之前减少resultList中的每个rating_id。这样你就不需要代理ListItem为0值。

答案 1 :(得分:2)

尝试使用RadioButtonList。

<asp:RadioButtonList id="myList" runat="Server">
   <asp:ListItem id="1" value="1">1</asp:ListItem>
   <asp:ListItem id="2" value="2">2</asp:ListItem>
   <asp:ListItem id="3" value="3">3</asp:ListItem>
   <asp:ListItem id="4" value="4">4</asp:ListItem>
   <asp:ListItem id="5" value="5">5</asp:ListItem>
</asp:RadioButtonList>

然后在你的代码背后使用类似的东西:

myList.Items.FindByValue(yourDBValue).Selected = true;

编辑:

或者,将selectedValue绑定在控件本身中;正如Yuriy建议的那样。

答案 2 :(得分:0)

GridView控件有RowCreated个事件。在那里,您可以根据数据库中的值检查单选按钮。您可能必须使用FindControl()来获取正确的单选按钮。

此页面提供了如何创建OnRowCreated事件处理程序的一个很好的示例:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowcreated.aspx

答案 3 :(得分:0)

也许您可以尝试通过字符串名称来执行.FindControl,也就是说,如果您在gridView中查找单选按钮。只需将网格视图绑定到数据源,然后在rowDataBound上搜索每一行上的单选按钮。假设你有5个带有名字的单选按钮: rb1,rb2,rb3等等.. 因此,当您获得评级ID时,只需将其添加到字符串名称,如此

protected void gridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{
   GridViewRow row = (GridViewRow)e.item;
   ..YourObject.. data = (..YourObject..)e.item.DataItem;
   //and now you search for your radio button
   RadioButton button = (RadioButton)row.FindControl("rb" + data.rating_id); 
   //or just use the id as a name like you have allready named them
   button.cheched = true;
}