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.
|