привязать список переключателей к столбцу в сетке - PullRequest
3 голосов
/ 23 сентября 2010

У меня есть список переключателей в виде сетки, который необходимо привязать к столбцу. Если значение в столбце равно 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>

Codebehind:

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

End Sub

1 Ответ

4 голосов
/ 23 сентября 2010

Вы можете попробовать встроенное связывание:

<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. Используйте быстрые часы, чтобы узнать, как наложить объект на нужное свойство.

...