我有一堆DynamicFields像這樣的GridView;從GridView調用數據
<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
沒有消息框顯示,所以所有的單元格都是空字符串。但我可以清楚地看到他們在屏幕上填充!我究竟做錯了什麼?
UPDATE
,我找文本框元素我用下面的代碼基本上看錶中的所有單元格,並嘗試對提取數據出來他們與Pilgerstorfer弗朗茨建議後,如果它不是空白,則顯示一個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,但我嘗試過使用;
其中Num
通過增加每次一個期待它帶回行數據的休息,但我只是得到了一個索引超出範圍的錯誤。
其他更新!
這是ASPX頁面的另一部分,但我不完全確定它的功能。 Pilgerstorfer Franz創建了一些代碼來查找由dynamicControl創建的文本框。現在我想知道這裏的代碼是否會導致使用其他類型的控件而不是Textboxes。思考?
<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>
注意:在ASP.NET中使用Msgbox沒有任何意義(並且在除服務器之外的其他計算機上不起作用)。你應該爲這個使用一個Javascript警報:'ClientScript.RegisterStartupScript(Me.GetType(),「AlertMessageBox」,「alert('oops');」,True)' – 2012-08-13 09:38:44
你使用什麼事件代碼? (page_load,Button_click ...) – 2012-08-13 09:58:25
'Protected Sub GridView1_Updating(ByVal sender As Object,ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs)Handle GridView1.RowUpdating' is my my stub which which from a'LinkButton' – windowskm 2012-08-13 10:08:27