あなたがRowState=DataControlRowState.Edit
を選択したので、あなたのラベルがEditItemTemplate
であることを考える理由は、私はよく分かりません。
実際にはRowType=DataControlRowType.DataRow
を確認する必要があります。これは最初の行のRowType
がヘッダーであるため必要です。
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridviewrow.rowtype.aspx
Private Sub GridView1_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
' in the following way you get the row's DataSource: '
Dim row = DirectCast(e.Row.DataItem, DataRowView).Row
' you could also use the DataSource to get the value: '
Dim lang_String = row.Field(Of String)("lang_String")
' and here you get the reference to your Label in the ItemTemplate: '
Dim Label11 = DirectCast(e.Row.FindControl("Label11"), Label)
' at this point Label11.Text is already set to lang_String '
End If
End Sub
あなたのEditItemTemplate
あなたが(通常はあなたがEditItemTemplate
内のTextBoxのような編集可能なコントロールを使用します)あなたのGridViewで、たとえば、aditionally RowStateを確認する必要のコントロールを取得したい場合は、次の
RowDataBound
で
<ItemTemplate>
<asp:Label ID="LblLanguage" runat="server" Text='<%# Bind("lang_String") %>' Width="250px"></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TxtLanguage" runat="server" Text='<%# Bind("lang_String") %>' Width="250px"></asp:TextBox>
</EditItemTemplate>
:
Private Sub GridView1_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
' in the following way you get the row's DataSource: '
Dim row = DirectCast(e.Row.DataItem, DataRowView).Row
' you could also use the DataSource to get the value: '
Dim lang_String = row.Field(Of String)("lang_String")
If e.Row.RowState = DataControlRowState.Normal Then
' and here you get the reference to your Label in the ItemTemplate: '
Dim LblLanguage = DirectCast(e.Row.FindControl("LblLanguage"), Label)
' at this point LblLanguage.Text is already set to lang_String '
ElseIf e.Row.RowState = DataControlRowState.Edit Then
' and here you get the reference to your TextBox in the EditItemTemplate: '
Dim TxtLanguage = DirectCast(e.Row.FindControl("TxtLanguage"), TextBox)
' at this point TxtLanguage.Text is already set to lang_String '
End If
End If
End Sub
私はコントロールのIDをやや読みやすいものに変更しました。
さて、選択した行が編集モードであることを確認する必要があります。ヘッダー行は決して...他のセクションで動作しますので、変更が必要かどうかを確認する必要があります。スニペットのおかげで、私は今テストします。そうです、これは再帰的ループではありません。編集中の行の値だけが必要です。 – htm11h
これはRowUpdatingイベントで実行できますか? – htm11h
@ marc11h:私の答えを編集しました。 RowUpdatingでは、グリッドの更新行を取得するには 'Dim row = GridView1.Rows(e.RowIndex)'が必要です。次に、 'FindControl'を使って、あなたのconrolへの参照を取得することもできます。 –