2011-12-28 25 views
0

私は次のコードがありますDataGridのセット列幅をプログラム

protected void Page_Load(object sender, EventArgs e) 
    { 
     var src1 = Page.DataContext.ExtranetTypes; 
     var res1 = from row in src1 select row; 

     var src2 = Page.DataContext.ExtranetDocuments; 
     var res2 = from row in src2 select row; 

     var query = from r1 in res1 
        join r2 in res2 on r1.ID equals r2.FileTypeID 
        select new { r2.PublicationDate, Title = r2.Title, Type = r1.Title }; 

     DocumentGrid.DataSource = query; 
     DocumentGrid.DataBind(); 
    } 

を、私は列の幅を設定したいのですが、クエリが持っているので、私は列ごとに幅を設定することはできませんまだ実行されていません。クエリがexcecutedされたときに、列が計算され、それが原因で遅延バインディングの可能性、最新の時点で実行されますので、

DocumentGrid.Columns[1].ControlStyle.Width 

は、エラーになります。これらの列の幅を設定する方法はありますか?

+0

ここをクリックhttp://odetocode.com/articles/218.aspx –

+1

自動生成された列の代わりにBoundField列を使用します。 – adatapost

答えて

1

データソースに表示するものがある場合、データグリッドまたはgridviewが生成されます。何も表示されない場合、グリッドはページに表示されません。しかし、データがない場合にグリッドを表示したい場合は、スケルトンのデータテーブルまたはリストを追加してグリッドをレンダリングすると、コードが機能します。あなたは、グリッドのHTMLを貼り付けた場合にも、それはgreateの助けになり

-2

使用

DocumentGrid.DataSource = query.ToList(); 

あなたがプログラム的に幅を設定することができます。これは、query.ToList()がデータをコミットし、DocumentGrid.DataSourceプロパティで読み取り可能にするためです。

+0

それは問題を解決しません、彼は幅を増やすように求めています –

+0

query.ToList()コマンドの後、彼はプログラムで幅を設定することができます。 – Flaick

0

私はBoundFieldsを私の質問に対するコメントの1つとして提案しました。

結果:

<asp:GridView ID="DocumentGrid" runat="server" AutoGenerateColumns="False"> 
    <Columns> 
     <asp:BoundField HeaderText="Publication Date" DataField="PublicationDate" ItemStyle-Width="120px"/> 
     <asp:BoundField HeaderText="Title" DataField="Title" ItemStyle-Width="400px"/> 
     <asp:BoundField HeaderText="Type" DataField="Type" ItemStyle-Width="100px"/> 
    </Columns> 
</asp:GridView> 

ただ、そうでなければ、余分な列を取得します、falseに自動生成列を設定してください。

関連する問題