1

CheckBoxList を使用して、GridView に表示される列を定義しています。次のようなクエリを使用して CheckBoxList にデータを入力します

select column_name, data_type from information_schema.columns
    where table_name = 'myTable'

ユーザーが表示する列 (さまざまなデータ型を含む) を選択した後、ボタンを押すと、次の VB コード スニペットによって GridView が生成されます。

For Each item As ListItem In chooseColsList.Items
    If item.Selected Then
        Dim bf As New BoundField()
        'PRODUCES BUGGY RESULTS BECAUSE APPLIED TO ALL BoundFields
        bf.DataFormatString = "{0:dd-MMM-yyyy}"
        bf.ApplyFormatInEditMode = True
        bf.DataField = item.Value
        bf.HeaderText = item.Value
        bf.SortExpression = item.Value
        statusReportGrid.Columns.Add(bf)
    End If
Next

私がやりたいことは、DataFormatString を「日付」データ型を持つ列にのみ適用することです。ただし、バインドされている列のデータのタイプをプログラムで決定する方法はなく、この情報をコントロールに渡す方法もありません。私のクエリに示されているように、この情報は information_schema に存在しますが、それを抽出してそれを使用して BoundFieldsを動的にセットアップする方法がわかりません。SqlDataSourceを使用していることに注意することが重要です。

私は、考えられるほぼすべての解決策を試して、ここにたどり着きました。

あなたの助けを前もってありがとう、それは非常に感謝しています:)

4

1 に答える 1

1

チェック ボックス リストを次のように設定した場合:

<asp:checkboxlist id="list" runat="server"  
DataTextField="column_name" DataValueField="data_type" DataSourceID="YourDSID" />

次のように、アイテムを反復処理して現在のアイテムの値を確認できるはずです。

For Each item As ListItem In chooseColsList.Items
    If item.Selected Then
        Dim bf As New BoundField()

        If StrComp(item.Value,"date") = 0 Then 'Or however datetime is returned
            bf.DataFormatString = "{0:dd-MMM-yyyy}"
            bf.ApplyFormatInEditMode = True
        End If
        bf.DataField = item.Text
        bf.HeaderText = item.Text
        bf.SortExpression = item.Text
        statusReportGrid.Columns.Add(bf)
    End If
Next
于 2011-09-21T00:19:26.067 に答える