Impostare la Larghezza del gridview colonne in modo dinamico quando AutoGenerateColumns=“true”

Ho un problema di impostazione della larghezza della gridview quando ho usato la proprietà AutoGenerateColumns per AutoGenerateColumns=”true”. E la gridview è databind in codice dietro. Se sto usando gridview1.columns(0).larghezza aumento di errore.

E il GridView1.Le colonne.Conte è sempre pari a zero, perché la griglia è databind.

.aspx: –

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true">
</asp:GridView>

In codice dietro

Dim strCon As New SqlConnection("Data Source=myDataSource;Initial Catalog=myDataBaseName;Persist Security Info=True;User ID=GKRANJAN;Password=abcdef")
        Dim da As New SqlDataAdapter("Select * from myTableName", strCon)
        Dim ds As New DataSet
        da.Fill(ds)
        GridView1.DataSource = ds
        GridView1.DataBind()

Quindi myTableName ha più colonne e non mi piace per aggiungerli tramite BoundFiled poiché essi variano nel mio caso.

In GridView1_RowDataBound ho usato : –

Private Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
Dim cell As TableCell = e.Row.Cells(0)
            cell.Width = New Unit("200px")
    End Sub

Ma potrebbe non funzionare per me. Please help me!!

Grazie a tutti!!

Fornire una completa RowDataBound corpo del metodo. Che cosa fare il check-in con If clausola?
mi dispiace è stato aggiunto per errore. Grazie.

OriginaleL’autore Gopal Krishna Ranjan | 2011-12-16

3 risposte

  1. 3

    Ho capito.

    Sotto è l’ .pagina aspx: –

    <body>
        <form id="form1" runat="server">
        <div>
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true" 
    
            style="table-layout:fixed;" Width="1000px">        
    
            <!-- Mind the above two lines to make this trick effective you must have to use both properties as is; -->
    
            </asp:GridView>
        </div>
        </form>
    </body>

    E questo è il Codice che sta dietro: –

    Imports System.Data.SqlClient
    Partial Public Class _Default
        Inherits System.Web.UI.Page
    
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim strCon As New SqlConnection("Data Source=myDataSource;Initial Catalog=myDataBaseName;Persist Security Info=True;User ID=GKRANJAN;Password=abcdef")
            Dim da As New SqlDataAdapter("Select * from myTableName", strCon)
            Dim ds As New DataSet
            da.Fill(ds)
            GridView1.DataSource = ds
            GridView1.DataBind()
        End Sub
    
        Private Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
            If e.Row.RowType = DataControlRowType.Header Then
    
                'For first column set to 200 px
                Dim cell As TableCell = e.Row.Cells(0)
                cell.Width = New Unit("200px")
    
                'For others set to 50 px
                'You can set all the width individually
    
                For i = 1 To e.Row.Cells.Count - 1
                    'Mind that i used i=1 not 0 because the width of cells(0) has already been set
                    Dim cell2 As TableCell = e.Row.Cells(i)
                    cell2.Width = New Unit("10px")
                Next
            End If
        End Sub
    End Class 

    In realtà quando usiamo boundfields poi gridview la larghezza delle colonne di rendering del browser, come abbiamo impostato la larghezza di ciascuna e di tutte le colonne. Ho usato due metodi in due progetti, che è uno prendendo campi associati con AutoGenerateColumns=”false” e l’altro impostando il AutoGenerateColumns = “true” – singolarmente in due e poi quando la pagina ha ottenuto il rendering nel browser, ho usato “Visualizza Sorgente” funzionalità del browser e poi si rese conto che cosa è la differenza principale in entrambi i tipi. La differenza è: –

    style="table-layout:fixed;" 

    Ho anche aggiunto il seguente righe nel mio .pagina aspx in gridview tag: –

    style="table-layout:fixed;" Width="1000px" 

    E ora sta funzionando bene.

    Grazie a Tutti!!

    OriginaleL’autore Gopal Krishna Ranjan

  2. 2

    Non so se è solo un errore di battitura(o omesso), ma il codice sul RowDataBound parte mancante SE parte..

    Ma siete sulla strada giusta. Me, io uso qualche cosa come questo e funziona per tutto il tempo

    Protected Sub gvData_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvData.RowDataBound
         If e.Row.RowType = DataControlRowType.DataRow Then
                e.Row.Cells(0).Width = New Unit("200px")
                e.Row.Cells(1).Width = New Unit("500px")
         End If
     End Sub

    Ma ricordate, il gridview viene eseguito il rendering di una tabella. Così le cellule verrà ridimensionata per il più lungo contenuto.

    Lo stesso è accaduto con me. La tabella è ridimensionata e tutto il lavoro fatto diventa inutile. @noisyass2
    si potrebbe sempre usare i CSS per risolvere la larghezza della tabella. o un po ‘ di js magico..

    OriginaleL’autore noisyass2

  3. 2

    Se non si intenda verificare la griglia in modalità fissa (es. in attesa di un overflow del comportamento, ci sono un gran numero di colonne) quindi la soluzione di cui sopra con style=”table-layout:fixed;” non è il più appropriato.

    ad esempio, vedere il seguente scenario:

    <div style="overflow:auto;">
     <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true"></asp:GridView>
    </div>

    In questo caso basta impostare la Larghezza della cella di valore specifiche e di Imposta Cella è a capo Falso

    Protected Sub gvData_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvData.RowDataBound
         If e.Row.RowType = DataControlRowType.DataRow Then
            e.Row.Cells(0).Width = New Unit("200px") 
            e.Row.Cells(0).Wrap = false
         End If
    End Sub

    OriginaleL’autore Lin

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *