我有一个 GridView,里面有一堆这样的 DynamicField;
<asp:GridView ID="GridView1" runat="server" DataSourceID="GridDataSource">
<Columns>
<asp:DynamicField HeaderText="Date Submitted" DataField="DATE_CREATED" />
<asp:DynamicField HeaderText="Assigned To" DataField="ASSIGNED_TO" />
<asp:DynamicField HeaderText="Active Account" DataField="Active_Account" />
<asp:DynamicField HeaderText="Client ID" DataField="CLIENT_ID" />
<asp:DynamicField HeaderText="Client Type" DataField="CLIENT_Type" />
</Columns>
</asp:GridView>
<asp:EntityDataSource ID="GridDataSource" OnSelected="TotalRows" runat="server"
EnableDelete="true">
<WhereParameters>
<asp:DynamicControlParameter ControlID="FilterRepeater" />
</WhereParameters>
</asp:EntityDataSource>
现在它显示正常,正确的数据出现在屏幕上,但是当我尝试使用行号访问该数据时,我总是找到空白单元格。例如,我尝试了以下方法来检查每个单元格,但无济于事;
Dim x As Integer = 0
Dim y As Integer = 0
While x < GridView1.Rows.Count
While y < GridView1.Rows(x).Cells.Count
If Not (GridView1.Rows(x).Cells(y).Text = "") Then
MsgBox(String.Format("{0},{1},{2}", x.ToString, y.ToString,
GridView1.Rows(x).Cells(y).Text))
End If
y = y + 1
End While
x = x + 1
y = 0
End While
没有显示消息框,因此所有单元格都是空字符串。但我可以清楚地看到它们在屏幕上填充!我究竟做错了什么?
更新
在 Pilgerstorfer Franz 建议我寻找 Textbox 元素之后,我使用了以下代码,该代码基本上查看了表中的所有单元格并尝试从中提取数据,如果它不是空白,则显示一个 msgbox(也通知我任何新控件我没有考虑);
If GridView1.Rows(0).RowType = DataControlRowType.DataRow Then
For r = 0 To GridView1.Rows.Count - 1
For c = 0 To (GridView1.Rows(r).Cells.Count - 1)
Dim cell = GridView1.Rows(r).Cells(c)
For b = 0 To cell.Controls.Count - 1
If (cell.Controls(b).GetType() Is GetType(TextBox)) Then
Dim td = CType(cell.Controls(b), TextBox)
Text = td.Text.Trim
ElseIf (cell.Controls(b).GetType() Is GetType(LiteralControl)) Then
Dim td = CType(cell.Controls(b), LiteralControl)
Text = td.Text.Trim
ElseIf (cell.Controls(b).GetType() Is GetType(DynamicControl)) Then
Dim td = CType(cell.Controls(b), DynamicControl)
Text = td.Table.Columns.Item(c).DisplayName()
Else
MsgBox(String.Format("New Control of type: {0}", cell.Controls(b).GetType().FullName))
End If
If Not Text = "" Then
MsgBox(String.Format("{0},{1},{2}", c.ToString, b.ToString, Text))
End If
Next
Next
Next
End If
不幸的是,大多数单元格只包含 DynamicControl 并且由于我将其DisplayName
放入其中,因此Text
我每次都只是获取列标题。那么如何从 DynamicControl 中获取文本值属性呢?
附加信息
我对这个问题感到更加困惑,因为这是一个我正在更新的项目,所以有两行初始代码;
Dim UserID = Convert.ToInt32(GridView1.DataKeys(e.RowIndex).Value)
Dim clientType As String = GridView1.DataKeys(e.RowIndex).Item(1).ToString
这些成功带回了 UserID 和 ClientType。现在我不太了解 DataKeys 但我尝试使用;
Dim clientType As String = GridView1.DataKeys(e.RowIndex).Item(Num).ToString
Num
每次期望它带回其余的行数据时都会增加一,但我只是得到一个索引超出范围错误。
另一个更新!
这是 ASPX 页面的另一部分,但我不完全确定它的作用。Pilgerstorfer Franz 创建了一些代码来查找由 dynamicControl 创建的文本框。现在我想知道这里的代码是否会导致使用其他类型的控件而不是文本框。想法?
<asp:FilterRepeater ID="FilterRepeater" runat="server" Visible="false">
<ItemTemplate>
<h2><asp:Label ID="lblDisplay" runat="server" Text='<%#
Eval("DisplayName") %>' AssociatedControlID="DynamicFilter$DropDownList1" /></h2>
<asp:DynamicFilter runat="server" ID="DynamicFilter"
OnSelectedIndexChanged="OnFilterSelectedIndexChanged" />
</ItemTemplate>
<FooterTemplate><br /><br /></FooterTemplate>
</asp:FilterRepeater>