我在我的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以下的无线电按钮被剔除..
如何实现这一目标?
答案 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;
}