1

データセットにバインドされたデータであるグリッドビューがあります。グリッドには、デフォルト値の列があり、ドロップダウンリスト、チェックボックス、テキストボックスの3つのコントロールがあります。入ってくるデータに応じて、これらのコントロールのいずれかに切り替えることができます。データを表示するだけでよい場合は、すべてが簡単です。gridview_prerenderイベントでは、コントロールの1つを表示するだけです。コントロールは次のように設定されます。

<asp:TemplateField HeaderText="Default Value" SortExpression="DefaultValue">
 <ItemTemplate>
  <asp:TextBox ID="txt_defaultValue_view" runat="server" Text='<%# Bind("DefaultValue") %>' Enabled ="false" />
  <asp:DropDownList ID="ddl_defaultValue_view" runat="server" Enabled ="false" />
  <asp:CheckBox ID="chk_defaultValue_view" runat="server" Enabled ="false"  />
 </ItemTemplate>
 <EditItemTemplate>
  <asp:TextBox ID="txt_defaultValue_edit" runat="server" Text='<%# Bind("DefaultValue") %>'/>
  <asp:DropDownList ID="ddl_defaultValue_edit" runat="server" />
  <asp:CheckBox ID="chk_defaultValue_edit" runat="server" />
 </EditItemTemplate>
</asp:TemplateField>

編集モードでグリッドを新しいデータで更新する必要があるときに問題が発生します。テキストボックスコントロールのみがデータバインドされているため、RowUpdatingイベントはテキストボックス列のデータにのみアクセスでき、他のすべてのデータは単に破棄されます。また、チェックボックスとドロップダウンリストコントロールを使用してデータバインドすることはできません。これは、無効なデータ型の例外が発生する可能性があるためです。では、3つの異なるコントロールがあり、これら3つのコントロールのそれぞれに有効なデータがある可能性がある列を更新する方法を知っている人はいますか?

ありがとう

4

2 に答える 2

3

まず、グリッドのRowDataBoundでコントロールの表示を切り替えますが、PreRenderでは変更できません。これは、DataBindingでのみ変更でき、すべてのポストバックで変更できるわけではないためです。ドロップダウンをそのデータソースにバインドし、チェックボックスのチェック状態を変更し、行のデータ項目に従ってテキストボックスのテキストプロパティを設定することもできます。更新すると、 RowUpdatingのFindControlを使用してコントロールを検索し、 それらの値(fe Dropdownlist.SelectedValue)を取得できます。

于 2010-06-25T15:38:31.360 に答える
1

GridViewには、次の2つのイベントがあります。

RowUpdating / RowUpdated

RowDeleting / RowDeleted

...。

あなたの場合、あなたの必要なRowUpdating-は更新が実行される直前に呼び出されます、それで行で期待されるコントロール(チェックボックスを言う)を見つけてデータベースに渡す前に準備をしてください

ObjectDataSourceイベントの更新を使用する可能性を確認する別の方法として、クエリ実行のパラメーターを指定する通常の方法です。

于 2010-06-25T15:32:51.423 に答える