나는 GridView와 같이 DynamicField를 많이 가지고 있습니다.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을 포함하고 내가 Text
에 DisplayName
을 가하고 이후 난 그냥 열 머리글마다 시간을 얻고 있었다. 그렇다면 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에 의해 만들어진 텍스트 상자를 찾을 수있는 코드를 만들었습니다. 이제이 코드로 Textbox가 아닌 다른 유형의 컨트롤이 사용되는지 궁금합니다. 생각? 내 가정 (주석 참조) 난 작은 데모를했다 따르면
<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를 사용하는 것은 의미가 없으며 서버가 아닌 다른 컴퓨터에서는 작동하지 않습니다. 'ClientScript.RegisterStartupScript (Me.GetType(), "AlertMessageBox", "alert ('oops');", True)' –
코드에 어떤 이벤트를 사용합니까? (page_load, Button_click ...) –
'Protected Sub GridView1_Updating (ByVal 보낸 사람 Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) GridView1.RowUpdating 처리'는 LinkButton에서 오는 내 스텁입니다 – windowskm