Связывание Gridview с комбобоксами в заголовке - PullRequest
0 голосов
/ 27 июля 2010

Может ли кто-нибудь объяснить мне, как можно связываться с видом сетки в ASP.Net 4 в сценарии, где первая строка моего вида сетки должна быть заголовками, вторая должна быть комбинированным списком для каждого столбца и третьей начало моего фактического источника данных.

Если вы можете вообразить, что я пытаюсь достичь, это возможность создать привязку между каждым столбцом в сетке данных и другим источником данных. Эта привязка создается пользователем, выбирающим значение в выпадающих списках. Однако независимо от того, что я пытаюсь, я не могу достичь этого.

HeaderText1 | HeaderText2 | HeaderText3
ComboBox1   | ComboBox2   | ComboBox3 
DataRow1    | DataRow1    | DataRow1 
DataRow2    | DataRow2    | DataRow2 
DataRow3    | DataRow3    | DataRow3

Ответы [ 2 ]

0 голосов
/ 28 июля 2010

Так что для любого любопытного это, кажется, решение проблемы.

Private Sub grdMainGrid_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles grdMainGrid.RowCreated
    If e.Row.RowType = DataControlRowType.Header Then
        For Each itm As TableCell In e.Row.Cells
            itm.Text = GenerateHeaderHTML()
        Next
    End If
End Sub

PS: Если у кого-то есть более удачные решения, я бы хотел их услышать: -)

Ниже приведен код, который у меня есть в GenerateHeaderHTML (). Мой код - очень специфический случай (и, вероятно, далеко не отличный). Однако учтите, что вы можете использовать любой html-файл, какой пожелаете.

    Private Sub grdMainGrid_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles grdMainGrid.RowCreated
            If Me.BoundedObjects IsNot Nothing Then
                If e.Row.RowType = DataControlRowType.Header Then
                    Dim PrimitivePropertyNames As List(Of String) = ParserHelper.GetPrimitivePropertyNames(Me.BoundedObjects.ToList)
                    Dim i As Integer = 0
                    For Each itm As TableCell In e.Row.Cells
                        itm.Text = ucStockImport.CreateBindingHeaderTable(itm.Text, PrimitivePropertyNames, i.ToString)
                        i += 1
                    Next
                End If
            Else
                Throw New StockImportException("ucStockImport.BoundedObjects Is Nothing")
            End If
        End Sub

        Private Shared Function CreateBindingHeaderTable(ByVal HeaderText As String, ByVal PropertyNames As List(Of String), ByVal ID As String) As String
            Return String.Format("<table><tr><td>{0}</td></tr><tr><td>{1}</td></tr></table>", HeaderText, ucStockImport.CreateBindedObjectDropDownList(PropertyNames, ID))
        End Function

        Private Shared Function CreateBindedObjectDropDownList(ByVal PropertyNames As List(Of String), ByVal ID As String) As String
            Dim strBuilder As New StringBuilder

            strBuilder.Append(String.Format("<option value=""{0}"">{1}</option>", i, propName))

            Dim i As Integer = 0

            For Each propName As String In PropertyNames
                strBuilder.Append(String.Format("<option value=""{0}"">", i) & propName & "</option>")
                i += 1
            Next

            strBuilder.Append("</select>")
            Return strBuilder.ToString
        End Function
0 голосов
/ 27 июля 2010

Вы можете довольно просто поместить DropDownList в столбец Gridview, используя TemplateColumn:

<asp:GridView runat="server" ID="ComboboxGridView">
    <Columns>
        <asp:TemplateField HeaderText="Column 1">
            <HeaderTemplate>
                <asp:DropDownList runat="server" ID="Column1DropDownList" />
            </HeaderTemplate>
            <ItemTemplate>
                <asp:Label runat="server" ID="Column1DisplayLabel" Text='<%# Eval("Column1") %>' />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

, и вы можете легко связать DropDownList с другим источником данных, особенно если вы используете элементы управления DataSource.Мне не ясно, что вы делаете с DropDownLists в заголовке - для фильтрации строк, которые появляются в GridView?

...