0

ObjectDataSource にバインドされたグリッド ビューがあります。ユーザーがデータの更新を完了したら、ユーザー名またはユーザー ID を UpdatedBy 列に入力して、誰がどのレコードを更新したかを追跡したいと考えています。UpdatedBy 列は、ページ上で非表示または読み取り専用にすることができるため、ユーザーはそこにテキストを入力することはできません。

ここに私の UpdatedBy フィールドがあります:

    <asp:BoundField DataField="UpdatedBy" HeaderText="Updated By" SortExpression="UpdatedBy" />
    <asp:TemplateField HeaderText="Updated By">
        <asp:itemTemplate>
            <asp:Label ID="lblUpdatedBy" runat="server" Text='<% #Eval("UpdatedBy") %>' Width="30" ></asp:Label>
        </asp:itemTemplate>
        <asp:editItemTemplate>
            <asp:TextBox ID="txtUpdatedBy" runat="server" CssClass="Gridview_EditItem" Text='<% #Bind("UpdatedBy") %>' Width="30" ></asp:TextBox>
        </asp:editItemTemplate>
    </asp:TemplateField>

RowUpdating イベントに更新コードを入れたのですが、なぜか動きません。

protected void gvProductQuery_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
   GridViewRow gr = gvProductQuery.Rows[e.RowIndex];
   TextBox tb = gr.FindControl("txtUpdatedBy") as TextBox;
   tb.Text = cUser.DomainLogin;
}

上記のコードでは、tb は Null です。助けてください。または、これを行う簡単な方法はありますか?私はVS2012を使用しています

ありがとう

4

1 に答える 1

1

これを試してください:

protected void gvProductQuery_RowEditing(object sender, GridViewEditEventArgs e)
{
   gvProductQuery.EditIndex = e.NewEditIndex;
   gvProductQuery.DataBind();
}

protected void gvProductQuery_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
   GridViewRow row = gvProductQuery.Rows[gvLevels.EditIndex];
   TextBox tb = row.FindControl("txtUpdatedBy") as TextBox;
   tb.Text = cUser.DomainLogin;
}
于 2013-03-18T16:31:40.987 に答える