3

我在需要绑定到列的网格视图中有单选按钮列表。如果一列中的值为 0,则选择第一个单选按钮,如果为 1,则选择另一个。

这是代码,其中一些被部分删除,因为它不是必需的

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<>"
    SelectCommand="" SelectCommandType="StoredProcedure" UpdateCommand="">
    <SelectParameters></SelectParameters>
    <UpdateParameters></UpdateParameters>
</asp:SqlDataSource>
<asp:GridView ID="gvBlockDetail" runat="server" AutoGenerateColumns="False"
    DataKeyNames="curriculumyear,electiveid,blockid" DataSourceID="SqlDataSource1"
    HorizontalAlign="Left" CellPadding="1" CssClass="news" GridLines="None" 
    BorderColor="#ebe9e2" BorderStyle="Solid" BorderWidth="1" >
    <AlternatingRowStyle BackColor="#ebe9e2" />
    <HeaderStyle BackColor="#660000" ForeColor="White" Font-Size="Small" />
    <RowStyle Font-Size="9pt" Wrap="false" ForeColor="#660000" HorizontalAlign="Center" />
    <Columns>
        <asp:TemplateField HeaderText="Add/Remove">
            <HeaderStyle Width="15%" />
            <ItemStyle Wrap="false" Width="80px" />
            <ItemTemplate>
                <asp:RadioButtonList ID="rblAddRemove" runat="server" RepeatDirection="Horizontal">
                    <asp:ListItem Text="Add" Value="0"></asp:ListItem>
                    <asp:ListItem Text="Remove" Value="1"></asp:ListItem>
                </asp:RadioButtonList>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Block">
            <HeaderStyle Width="15%" />
            <ItemStyle Wrap="false" Width="50px"  />
            <ItemTemplate>
                <asp:Label ID="lblBlock" runat="server" Text='<%# Bind("Block") %>'></asp:Label>
                <asp:Label ID="lblSection" runat="server" Text='<%# Bind("Section") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="daterange" HeaderText="Dates" ReadOnly="True"  SortExpression="daterange" />
        <asp:BoundField DataField="credithours" HeaderText="Credit Hrs" 
                                                    SortExpression="credithours" HeaderStyle-Width="10%" ItemStyle-Width="10%" />
        <asp:TemplateField HeaderText="Students&lt;br&gt;Per Block" HeaderStyle-Width="15%" SortExpression="studentsperblock">
            <EditItemTemplate>
                <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("studentsperblock") %>'></asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:TextBox ID="txtStudentsPerBlock" runat="server" MaxLength="3" Width="40px" Text='<%# Bind("studentsperblock") %>'></asp:TextBox>
            </ItemTemplate>
        </asp:TemplateField>    
        <asp:BoundField DataField="enrolled" HeaderText="Enrolled" ReadOnly="True"
                                                    SortExpression="enrolled" ItemStyle-Width="200px" />  
        <asp:BoundField DataField="blockid" HeaderText="blockid" ReadOnly="True" 
                                                    SortExpression="blockid" Visible="false" />
    </Columns>
</asp:GridView>

代码隐藏:

Protected Sub gvBlockDetail_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvBlockDetail.RowDataBound

End Sub
4

1 回答 1

5

您可以尝试内联绑定:

<asp:RadioButtonList ID="rblAddRemove" runat="server" RepeatDirection="Horizontal" SelectedValue='<%# Bind("YOURCOLUMN") %>'>
   <asp:ListItem Text="Add" Value="0"></asp:ListItem>
    <asp:ListItem Text="Remove" Value="1"></asp:ListItem>
</asp:RadioButtonList>

yourcolumn您描述的 int 列在哪里。

或通过RowDataBound事件。(伪代码,属性可能有不同的名称,我使用的是 C#)

Protected Sub gvBlockDetail_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvBlockDetail.RowDataBound
  if(e.Row.RowType == RowType.DataRow)
  {
   RadioButtonList rbl = e.Row.FindControl("rblAddRemove") as RadioButtonList;
   if(rbl != null)
   {
     rbl.SelectedValue = ((YOURDATAITEM)(e.Row.DataItem).YourProperty.ToString();
   }
  }
End Sub

编辑:我看到你没有使用自定义类。您需要使用 调整线YOURDATAITEM。使用快速观察来了解如何投射对象以获取所需的属性。

于 2010-09-22T22:07:20.783 回答