2009-05-26 9 views
2

データが既に格納されている(これが真であることが確認されています)。GridView DataBind()の後も列がありません

私は、そのデータビューに私のGridViewのDataSourceを設定し、.DataBind()関数を呼び出しました。

は右結合した後、私は私のGridViewの列数(grid.Columns.Count)をチェックし、それが0を示ししかし、それは15列と右の出力を示しています。

また、そのインデックスを使用して列にアクセスすると、例外がスローされます。

どうすれば列にアクセスできますか?

ありがとうございます!

EDIT - 追加情報:

私は実際にソートされ、その方向されているかの列を示すために列ヘッダに「グリフ」(UP/DOWN矢印)を追加する必要があります。以下のコードは私が使っているものです。問題は、Columns.Countは常にゼロです。

for (int i = 0; i < dgData.Columns.Count; i++) 
    { 
     string colExpr = dgData.Columns[i].SortExpression; 
     if (colExpr != "" && colExpr == dgData.SortExpression) 
      item.Cells[i].Controls.Add(glyph); 
    } 

答えて

2

編集

これを試してみてください、それはGridViewのSortExpressionに対してのLinkBut​​tonのテキストのテストに依存しているとして、それは非常に醜い少しです。 GridViewのIDは、あなたがRow.Cells.Countを確認することができたり、列の名前が必要な場合...私はあなたが列を生成し、自動であれば、列のコレクションが設定されているとは思わない

「テスト」

protected void test_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.Header) 
     { 
      foreach (TableCell tc in e.Row.Cells) 
      { 
       if(test.SortExpression.Contains((tc.Controls[0] as LinkButton).Text)) 
        tc.Controls.Add(glyph) 
      } 
     } 
    } 

ですHeaderRowを取得し、セル&の.Text値を取得します。

GridViewコントロールがソート可能である場合(例えば、あなたが

foreach(Row r in GridView.Rows) 
{ 
    if(r.RowType == HeaderRow) 
    { 
     r.Cells[0].Controls[0]; //Link Control is here. 
    } 
} 
+0

こんにちはをチェックする必要がありますカラム名を取得するには、その後、ヘッダー内のクリック可能なリンクを持って、質問に私の編集を参照してください。私は実際に必要とします列のSortExpressionプロパティ。 – Ian

+0

こんにちは、.Contains()に何を入れるべきですか? – Ian

関連する問題