0

ユーザーがデータをキャプチャする Web フォームがあります。このデータは、Gridview 内の他のデータに影響します。マスター データの更新が必要なテキスト ボックスとドロップ ダウンでデータが変更された場合に、[更新] ボタンを表示する DetailsView タイプのコントロールを正しくしたかったのです。

フォームにグリッドビューがあり、ユーザーが更新をクリックすると、グリッドビューにある主キーを使用してデータベース内のすべての行を更新したいと考えましたOrderId

各テキストボックスとドロップダウンボックスであるコードを配置し、それが呼び出されたルーチンを呼び出すとDoUpdate、これは機能します。ただし、変更ごとに更新が強制されるため、少し遅いので、更新ボタンを表示して、ユーザーがそれをクリックして更新できるようにした方がよいと思いました。

ルーチンがボタン ルーチンから呼び出されたとき、グリッドビューには行がありません。私はfindcontrol(gridview)か何かが必要だと思いますが、何を見つけるべきかわかりません.

ビハインド ボタン イベントで呼び出されたときに機能するコードを次に示しますが、コード ビハインド ボタンの一部として呼び出された場合、グリッドビューは行数 0 を返します。

  List<string> _OrderIds = new List<string>();

  foreach (GridViewRow gvr in gvOrderLines.Rows)
  {
    Label myOrderIDLablel = (Label)gvr.FindControl("lblOrderID");    //find control since it is a template field
    _OrderIds.Add(myOrderIDLablel.Text);
  }

グリッドビューは ASP ページで定義されています

<asp:GridView ID="gvOrderLines" runat="server" AutoGenerateColumns="False" 
        DataSourceID="odsOrderDetail" 
4

1 に答える 1

0

上記の私のコメントによると、次のようなことをしたいかもしれません:

List<string> _OrderIds = new List<string>();

  DataTable table = gvOrderLines.DataSource as DataTable;

  foreach (GridViewRow gvr in table.Rows)
  {
    Label myOrderIDLablel = (Label)gvr.FindControl("lblOrderID");    //find control since it is a template field
    _OrderIds.Add(myOrderIDLablel.Text);
  }

これがあなたを正しい方向に導くことを願っています。

于 2013-07-02T15:13:16.473 に答える