2011-01-10 3 views
0

С Новым годом. Я новичок в VB.NET и ASP.NET. Это моя проблема:Список флажков

Я извлекаю список записей из БД и для каждой строки мне нужно показать 4 флажка. Я могу использовать checkboxlist для каждой строки, но не совсем ясно, как я могу обрабатывать результаты после отправки.

У меня есть некоторый объект и некоторые операции, доступные для этого объекта. Из базы данных я извлекаю список объектов со всеми операциями. Для каждой операции я хочу показать флажок, чтобы включить или отключить операцию. В результате получается нечто вроде этого:

OBJ1 - url - [] [x] [] 

OBJ2 - url - [] [x] [x] 

На URL я в HREF на другую страницу, созданную с помощью Id извлеченного из БД. Чтобы создать это, я использовал этот код:

<td class="column-filename"> 
    <strong> 
     <asp:Label runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "GroupName")%>'></asp:Label> 
    </strong>      
</td>  
<td align="left"> 
    <span style="vertical-align:middle"> 
    <asp:CheckBoxList runat="server" ID="operations" RepeatDirection="Horizontal" RepeatLayout="Table"> 
     <asp:ListItem Text="View"></asp:ListItem> 
     <asp:ListItem Text="Upload"></asp:ListItem> 
     <asp:ListItem Text="Move"></asp:ListItem> 
     <asp:ListItem Text="Delete"></asp:ListItem> 
     <asp:ListItem Text="Rename"></asp:ListItem> 
     <asp:ListItem Text="Replace"></asp:ListItem> 
    </asp:CheckBoxList> 
    </span> 
</td> 
</asp> 
      </asp> 

моя проблема: как я могу разобрать все флажки?

Вы могли бы помочь мне или отправить мне ссылку или любые другие ресурсы для решения моей проблемы?

большое спасибо! Andrea

ответ

0

Теперь он отлично работает. Это мое решение (я его здесь, потому что я совершенно уверен, что в следующем месяце я буду иметь такую ​​же проблему ....)

<asp:DataGrid ID="GroupList" Runat="server" CssClass="widefat" 
      AutoGenerateColumns="False" 
      BorderColor="#999999" 
      BorderStyle="None" 
      BorderWidth="1px" 
      BackColor="White" 
      CellPadding="3" 
      GridLines="Vertical"> 
     <Columns>   
      <asp:BoundColumn HeaderText="Status" DataField="GroupName" /> 
      <asp:BoundColumn HeaderText="Status" DataField="GroupActive" /> 
      <asp:BoundColumn HeaderText="Status" DataField="GroupID" 
        Visible="false" /> 
      <asp:TemplateColumn HeaderText="Users" 
        ItemStyle-HorizontalAlign="Center"> 
       <ItemTemplate> 
        <asp:HyperLink runat="server" 
        NavigateUrl="User_manager.aspx" > 
        <asp:Image runat="server" 
        ImageUrl="~/images/folders/users.png" 
        Width="24" /></asp:HyperLink> 
       </ItemTemplate> 
      </asp:TemplateColumn> 
      <asp:TemplateColumn HeaderText="View" 
        ItemStyle-HorizontalAlign="Center"> 
       <ItemTemplate> 
        <asp:CheckBox ID="chkView" Runat="server" 
        Checked='<%# Eval("View").ToString().Equals("1")%>' /> 
       </ItemTemplate> 
      </asp:TemplateColumn> 
      <asp:TemplateColumn HeaderText="Upload" 
        ItemStyle-HorizontalAlign="Center"> 
       <ItemTemplate> 
        <asp:CheckBox ID="chkUpload" Runat="server" 
        Checked='<%# Eval("Upload").ToString().Equals("1")%>'/> 
       </ItemTemplate> 
      </asp:TemplateColumn> 
      <asp:TemplateColumn HeaderText="Delete" 
        ItemStyle-HorizontalAlign="Center"> 
       <ItemTemplate> 
        <asp:CheckBox ID="chkDelete" Runat="server" 
        Checked='<%# Eval("Delete").ToString().Equals("1")%>' /> 
       </ItemTemplate> 
      </asp:TemplateColumn> 
      <asp:TemplateColumn HeaderText="Move" 
        ItemStyle-HorizontalAlign="Center"> 
       <ItemTemplate> 
        <asp:CheckBox ID="chkMove" Runat="server" 
        Checked='<%# Eval("Move").ToString().Equals("1")%>' /> 
       </ItemTemplate> 
      </asp:TemplateColumn> 
      <asp:TemplateColumn HeaderText="Rename" 
        ItemStyle-HorizontalAlign="Center"> 
       <ItemTemplate> 
        <asp:CheckBox ID="chkRename" Runat="server" 
        Checked='<%# Eval("Rename").ToString().Equals("1")%>' /> 
       </ItemTemplate> 
      </asp:TemplateColumn> 
      <asp:TemplateColumn HeaderText="Replace" 
        ItemStyle-HorizontalAlign="Center"> 
       <ItemTemplate> 
        <asp:CheckBox ID="chkReplace" Runat="server" 
        Checked='<%# Eval("Replace").ToString().Equals("1")%>' /> 
       </ItemTemplate> 
      </asp:TemplateColumn> 
     </Columns> 
     <AlternatingItemStyle BackColor="#f9f9f9" /> 
     <ItemStyle ForeColor="Black" BackColor="#EEEEEE" BorderStyle="Solid" 
        BorderColor="#dfdfdf" BorderWidth="1px" /> 
     <headerStyle Font-Bold="True" ForeColor="Black" BackColor="#dfdfdf" 
        HorizontalAlign="Center" /> 
    </asp:DataGrid> 

И разобрать результат после того, как представить:

 For intRow = 0 To intRows 

      GridItem = GroupList.Items(intRow)    
      groupID = GridItem.Cells(2).Text().Trim() 

      If (DirectCast(GridItem.FindControl("chkView"), 
        CheckBox).Checked) Then 
       db.insertGroupOperation(repository_selected, 
        groupID, op_view) 
      End If 
      [..] 
     Next 

Спасибо всем за помощь!

свиданья, Андреа

0

Посмотрите на класс DataGrid - вы можете связать его с данными и создать столбец столбца флажка.

Это очень тяжелый контроль (в частности, ViewState), поэтому вы можете заменить что-то более легкое с большим контролем (и больше работы для реализации), например Repeater.

В любом случае вы сможете получить доступ к значениям в разных событиях обратной передачи.

+0

Хорошо, проблема в том, что мне нужно, чтобы показать некоторые HREF ссылки для каждого ряда, не уверен, что это возможно с классом DataGrid –

+0

@Andrea Girardi - Это помогло бы ответить на вопрос, если вы дать _all_ деталей и ограничений в вопросе, а не капать их. – Oded

+0

@Andrea Girardi - И вы можете использовать элемент управления «HtmlAnchor» или «LinkButton». Любой из них будет создавать якорь. – Oded

0

Если вам нужно отобразить их с каждой записью в БД, вы можете использовать GridView контроля. Создайте сетку со столбцами для записи. Затем добавьте GridTemplateField в элемент управления и добавьте свой флажок. Привяжите свой checkboxlist с помощью элемента управления источником данных; в противном случае вам придется привязываться в RowDataBound, а также выбирать элементы там (в обоих случаях). Пользователь может внести и сохранить изменения в массе, и вы можете получить значения через:

foreach (GridViewRow row in this.rg.Rows) 
{ 
    if (row.RowType == DataControlRowType.DataRow) 
    { 
     var list = (CheckBoxList)row.Cells[<index>].FindControl("chk"); 
     //Get checked items, save to DB 
    } 

}