1

我在我的 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 的值检查单选按钮。如果 rating_id 为 3,我需要检查 3 下的单选按钮是否为 1要检查的 1 下的单选按钮..

如何做到这一点?

4

4 回答 4

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>

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

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

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

于 2013-04-03T14:36:08.523 回答
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 绑定在控件本身;正如尤里建议的那样。

于 2013-04-03T14:31:12.660 回答
0

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

这个页面有一个很好的例子来说明如何创建OnRowCreated事件处理程序:

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

于 2013-04-03T14:26:16.143 回答
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;
}
于 2013-04-03T14:32:43.373 回答