paging u gridview   zodpovězená otázka

ASP.NET WebForms

Chtěl jsem se zeptat,zda je možné nějak udělat paging na data,ale né na řádky,ale prostě na sloupce v gridview.

Mam pár dat v řádkách,ale velké množství sloupců,tak jak vymyslet,abych zobrazil třeba 1-5,po kliknutí na tlačítko 6-10,atd a zpět.

Díky za námět

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No, doporučuji udělat komponenty LinkButton s popisy třeba 1-5, 6-10, 11-15 atd. a při kliknutí na ně normálně přojdete kolekci GridView1.Columns a sloupcům, které mají být vidět, nastavíte Visible na True, ostatním na False.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jenomže víte co je problém?

Nemůžu rozchodit gridview.columns(x).visible = (true,false)

Pořád to hlásí chybu s indexem. Jediné co jde,je skrývat přes e.row.cells(x).visible = (true,false).

Ale to mi vysvětlete.

Děkuji.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Není třeba nutné čekat až když se gridview nějak vykreslí,nebo něco jako na nějakou událost?

Díky za info,pomoc prosím.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tak je problém takový. Když používám e.row.cells(x).visible = false a měním globální proměnnou viewstate hodnotu x,tak se vždy skreje sloupec,který je v proměnné x.Ale je to v metodě RowCreated a vždy se skreje jen jeden,ostatní se odkryjí i když předcházející index měl hodnotu nastevenou na invisible.

Jak tomu rozumíte?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No, tak jsem to zkusil napsat, protože mě to taky zajímá. Udělal jsem jednoduchou proceduru ZobrazSloupce, které předáte index prvního a posledního zobrazeného sloupce (číslují se od nuly) a ona sloupce v daném rozsahu zobrazí a ostatní schová.

Pak jsem přidal dva LinkButtony, které tuto proceduru volají s různými parametry. Ještě je nutné při prvním načtení zobrazit jen prvních 5 sloupců, proto v Page_PreRender, kdy už je tabulka vytvořená a plně načtena (Page_Load by bylo moc brzo) zavolám opět metodu ZobrazSloupce, ale jen pokud je stránka načtena poprvé (IsPostBack má hodnotu False).


    Protected Sub LinkButton1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        ZobrazSloupce(0, 4)
    End Sub

    Protected Sub LinkButton2_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        ZobrazSloupce(5, 9)
    End Sub
    
    Private Sub ZobrazSloupce(ByVal zacatek As Integer, ByVal konec As Integer)
        For i As Integer = 0 To GridView2.Columns.Count - 1
            If i < zacatek Or i > konec Then
                GridView2.Columns(i).Visible = False
            Else
                GridView2.Columns(i).Visible = True
            End If
        Next
    End Sub

    Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs)
        'při prvním načtení zobrazit prvních 5 sloupců
        If Not Me.IsPostBack Then ZobrazSloupce(0, 4)
    End Sub

Ve stránce pak mám GridView a SqlDataSource. U GridView musí být explicitně uveden seznam sloupců, pokud je necháte vygenerovat automaticky a nedáte tam sekci Columns, nebude to fungovat!

    <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">1-5</asp:LinkButton>
    <asp:LinkButton ID="LinkButton2" runat="server" OnClick="LinkButton2_Click">6-10</asp:LinkButton>

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:VypujckyConnectionString %>"
        SelectCommand="SELECT 1,2,3,4,5,6,7,8,9,10 UNION ALL SELECT 1,2,3,4,5,6,7,8,9,10 UNION ALL SELECT 1,2,3,4,5,6,7,8,9,10"></asp:SqlDataSource>
    <asp:GridView ID="GridView2" runat="server" DataSourceID="SqlDataSource1" AutoGenerateColumns="false">
        <Columns>
            <asp:BoundField DataField="Column1" HeaderText="Sloupec 1" />
            <asp:BoundField DataField="Column2" HeaderText="Sloupec 2" />
            <asp:BoundField DataField="Column3" HeaderText="Sloupec 3" />
            <asp:BoundField DataField="Column4" HeaderText="Sloupec 4" />
            <asp:BoundField DataField="Column5" HeaderText="Sloupec 5" />
            <asp:BoundField DataField="Column6" HeaderText="Sloupec 6" />
            <asp:BoundField DataField="Column7" HeaderText="Sloupec 7" />
            <asp:BoundField DataField="Column8" HeaderText="Sloupec 8" />
            <asp:BoundField DataField="Column9" HeaderText="Sloupec 9" />
            <asp:BoundField DataField="Column10" HeaderText="Sloupec 10" />
        </Columns>
    </asp:GridView>

Je zbytečné blbnout v události RowCreated a skrývat jednotlivé buňky, lepší je opravdu skrývat ty sloupce. To ale jde jen v případě, že je máte v kódu stránky uvedeny.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky za návrh.Mám k tomu dotaz.

Na tomto řádku:

 SelectCommand="SELECT 1,2,3,4,5,6,7,8,9,10 UNION ALL SELECT 1,2,3,4,5,6,7,8,9,10 UNION ALL SELECT 1,2,3,4,5,6,7,8,9,10"></asp:SqlDataSource>

Já načítám z databáze různým způsobem. A to tak,že když je něco,načti toto atd.To znamená né pokaždé stejně,jako je zde uvedeno. Je možné vy uvedený řádek,napsat nějakou proměnnou,nebo podmínku,která by podle něčeho rozhodovala,co načíst t jakého zdroje apod.?

Děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Tohle je přío SQL dotaz, který pošlete do databáze. Nevím, jaká data v GridView zobrazujete, ale pokud je to z databáze, tak bez problémů můžete v události Page_Load nastavit vlastnost SelectCommand programově podle toho, co potřebujete vytáhnout.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback