Динамическое форматирование типов данных BoundField - PullRequest
1 голос
/ 21 сентября 2011

Я использую 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 к столбцам с типом данных date.Однако я не нашел способа программно определить тип данных в привязываемом столбце, ни способа передачи этой информации в Control.Эта информация существует в information_schema, как показано в моем запросе, но я не знаю, как ее извлечь и использовать для динамического настройки моих BoundFields.Важно отметить, что я использую SqlDataSource .

Я экспериментировал почти со всеми возможными решениями, которые я могу придумать и в итоге получить здесь.

Заранее спасибо за помощь, это ОЧЕНЬ ценится:)

1 Ответ

1 голос
/ 21 сентября 2011

Если вы установите свой список флажков следующим образом:

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