我正在使用CheckBoxList来定义在GridView中显示哪些列。我使用类似
的查询填充CheckBoxListselect 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仅应用于其中包含“日期”数据类型的列。但是,我没有找到以编程方式确定绑定列中数据类型的方法,也没有办法将此信息传递给Control。这个信息存在于information_schema中,如我的查询中所示,但我不知道如何将其解压缩并将其用于动态设置我的BoundFields。值得注意的是,我正在使用 SqlDataSource 。
我已经尝试了几乎所有我能想到的解决方案并最终在这里。
在此先感谢您的帮助,非常感谢:)
答案 0 :(得分: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