2011-12-16 22 views
3

プロパティAutoGenerateColumnsをAutoGenerateColumns = "true"に設定したときにgridviewの幅を設定する際に問題があります。そして、gridviewはコードビハインドでdatabindです。 gridview1.columns(0).widthを使用している場合、エラーが発生します。AutoGenerateColumns = "true"のときにgridview列の幅を動的に設定

グリッドビューがdatabindなので、GridView1.Columns.Countは常にゼロです。

.aspxので

: -

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() 

の背後にあるコードで

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

したがってmyTableNameは、より多くの列を持っており、私は彼らが私の場合には異なるためBoundFiledを介してそれらを追加したいといけません。 GridView1_RowDataBoundで

私が使用: -

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 

しかし、それは私のために動作しませんでした。私を助けてください!!

ありがとうございます!

+0

に特定の値とセットセルラップへのセルの幅を設定します。 'If​​'節で何をチェックインしますか? –

+0

@YuriyRozhovetskiy申し訳ありませんが間違って追加されました。ありがとう。 –

答えて

2

そのわずか誤植が(またはあなたがそれを省略)が、RowDataBound部にコードがIFの一部が欠落している場合、私は知らない...

しかし、youreの正しい軌道に乗って。私は、私はこのようないくつかのことを使用して、それは、GridViewのテーブルをレンダリングされ、すべての時間

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 

を動作しますが、覚えておいてください。したがって、細胞は最も長いコンテンツにサイズ変更されます。

+0

同じことが私に起こった。テーブルのサイズが変更され、すべての作業が無駄になります。 @ noisyass2 –

+0

テーブルの幅を固定するのに常にCSSを使うことができます。またはjsの魔法のビット.. – noisyass2

3

私はそれを得ました。以下は

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

そして、これは背後にあるコードである: - 実際に

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 

我々は、我々が設定した幅は、ブラウザでレンダリング、その後のGridViewの列をboundfieldsを使用する場合各列の幅。私は2つのプロジェクトで2つの方法を使用しました。つまり、AutoGenerateColumns = "false"でバインドされたフィールドを取る方法と、AutoGenerateColumns = "true"を設定する方法の2つの方法をそれぞれ2つのプロジェクトで使い、ブラウザでレンダリングしたとき、ブラウザの機能を理解し、両方のタイプの主な違いは何かを認識しました。私はまた、GridViewのタグで私の.aspxページに以下の行を追加

style="table-layout:fixed;" 

: - - :

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

そして今、それが正常に働いているとの差です。

ありがとうございました!

2

グリッドを固定モードで作成する予定がない場合(つまり、多数の列があるためオーバーフロー動作が予想される場合)、上記の解決策はstyle = "table-layout:fixed;"です。適切なものではありません。

以下のシナリオを参照してください。このような場合には

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

だけで、完全な `RowDataBound`メソッド本体を提供する偽

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 
関連する問題