webForumDet fria alternativet

Gridview värden

.NET

3 svar · 717 visningar · startad av ironhead

Medlem sedan mars 20011 346 inlägg
Frågan#1

Hej!

Jag har en gridview som skriver ut kategori och sedan alla artiklar under denna. När jag ska loopa igenom denna gridview, så ersätter kategorinamnet artikelnamnet, och antalet kommer på raden under...hur göra?

    <asp:GridView CssClass="Form" ID="GridView1" runat="server" AutoGenerateColumns="False" 
    DataSourceID="SqlDataSource1">
        <Columns>
           <asp:TemplateField HeaderText="Kategori">
                <ItemTemplate>
                    <asp:Label ID="CategoryName" runat="server" Text='<%# Eval("CategoryName") %>' Visible="False" />
                </ItemTemplate>
            </asp:TemplateField>
            
            <asp:TemplateField HeaderText="Artikel">
                <ItemTemplate>
                    <asp:Label runat="server" ID="Art" Text='<%#eval("ArticleName") %>' />
                </ItemTemplate>
            </asp:TemplateField>

            <asp:TemplateField HeaderText="Antal" ItemStyle-HorizontalAlign="Center">
              <ItemTemplate>
                <asp:label runat="server" ID="Ant" Text='<%# eval("Kpd") %>' />
              </ItemTemplate>
            </asp:TemplateField> 
          
       </Columns>
    </asp:GridView>
Codebehid:
   
      Private Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
        If e.Row.RowType = DataControlRowType.DataRow Then

            Dim drv As DataRowView = CType(e.Row.DataItem, DataRowView)
            If tmpCategoryName <> drv("CategoryName").ToString() Then
                tmpCategoryName = drv("CategoryName").ToString()

                Dim tbl As Table = CType(e.Row.Parent, Table)
                If Not tbl Is Nothing Then
                    Dim row As New GridViewRow(-1, -1, DataControlRowType.DataRow, DataControlRowState.Normal)
                    Dim cell As TableCell = New TableCell()

                    cell.ColumnSpan = GridView1.Columns.Count
                    cell.Width = Unit.Percentage(100)
                    cell.Style.Add("font-weight", "bold")
                    cell.Style.Add("background-color", "#dcdee2")
                    cell.Style.Add("color", "black")

                    Dim span As New HtmlGenericControl("span")
                    span.InnerHtml = tmpCategoryName
                    cell.Controls.Add(span)
                    row.Cells.Add(cell)
                    tbl.Rows.AddAt(tbl.Rows.Count - 1, row)
                End If
            End If

        End If
    End Sub

Vid spara (sparaknapp):

    Private Sub SaveorderData()
        Dim count As Integer = 0
        Do While (count < GridView1.Rows.Count)
            Dim ArticleName As Label = CType(GridView1.Rows(count).FindControl("ArticleName"), Label)
            Dim Ant As TextBox = CType(GridView1.Rows(count).FindControl("Ant"), TextBox)
            Response.Write(ArticleName.Text & " |" & Ant.Text)<br />")
            count += 1
        Loop
    End Sub

Det jag får ut blir detta:

|1 (24)
Artikel2 |0 (0)
Artikel3 |1 (12)
|1 (8)

Kategorinamnet ersätter artikelnamnet, men antalet kommer med??!!
Hur kan man göra detta på ett korrekt sätt?

Medlem sedan mars 20011 346 inlägg
#2

Om jag skippar RowDataBound eventet där kategorin loopas, så funkar det att spara datat.
Kan man på något bättre sätt skapa kategori->artiklar lista?

Medlem sedan mars 20011 346 inlägg
#3

Kan man skapa en nästlad kontroll för att få till det?
I så fall, vilken kontroll ska man använda?

Medlem sedan mars 20011 346 inlägg
#4

När jag kolllar HTML-koden ser den ut såhär:

	<table class="Form" id="GridView1">
		<tr>
			<th scope="col">Kategori</th>
			<th scope="col">Art.nr</th>
			<th scope="col">Artikel</th>
		</tr>
		<tr>
			<td colspan="3"><span>Kategori1</span></td>
		</tr>
		<tr>
			<td></td>
			<td><span id="GridView1_ctl02_artnr">1</span></td>
			<td><span id="GridView1_ctl02_ArticleName">ArtNamn1</span></td>
		</tr>
		
		<tr>
			<td colspan="3"><span>Kategori2</span></td>
		</tr>
		<tr><td></td>
        <td><span id="GridView1_ctl04_artnr">2</span></td>
        <td><span id="GridView1_ctl04_ArticleName">ArtNamn2</span></td>
		</tr>
		<tr>
			<td></td>
			<td><span id="GridView1_ctl05_artnr">3</span></td>
			<td><span id="GridView1_ctl05_ArticleName">ArtNamn3</span></td>
		</tr>
	</table>

I "GridView1.Rows.Count" får jag 6 rader. När jag ska spara räknar den kategorin som en rad, men inte i rows.count.
Det innebär att jag inte får med de två sista raderna.

Fattar ingenting...kategoriraden ersätter vid uppräknandet, men vid sparandet räknas den inte...hilfe plz!

257 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)