2

編集が許可されているSQLテーブルからデータが取り込まれたグリッドビューがある状況があります。フィールドの 1 つについては、ユーザーがグリッドビューの編集テンプレートのドロップダウン ボックスから値を選択する必要があるようにしています。

<asp:TemplateField HeaderText="Department" SortExpression="Department">
                 <EditItemTemplate>
                     <asp:DropDownList ID="ddlEditDepartment" runat="server" 
                         SelectedValue='<%# Bind("Department") %>'>
                    <asp:ListItem>Department 1</asp:ListItem>
                    <asp:ListItem>Department 2</asp:ListItem>
                    <asp:ListItem>Department 3</asp:ListItem>
                     </asp:DropDownList>
                 </EditItemTemplate>
                 <ItemTemplate>
                     <asp:Label ID="lblDepartment" runat="server" Text='<%# Bind("Department") %>'></asp:Label>
                 </ItemTemplate>
            </asp:TemplateField>

このフィールドの値がすでにテーブルに格納されているレコードに対して「編集」を選択しても問題ありません。ただし、「編集」を選択し、テーブルにまだ値がない場合は、次のエラーが発生します。

'ddlEditDepartment' has a SelectedValue which is invalid because it does not exist in the list of items.
Parameter name: value

この状況で空白または null 値を考慮して、これを機能させるにはどうすればよいですか?

4

2 に答える 2

1

DropDownList を GridView のデータソースの「Department」という名前のフィールドにバインドしています。

SelectedValue='<%# Bind("Department") %>'

これは一種のハックですが、GridView の Department フィールドにデータを入力するクエリを変更して、null を考慮に入れることができます (結合することによって)。

SELECT COALESCE(Department, "No department entered") AS Department
FROM YourTable

そして、それをドロップダウンの「デフォルト」オプションの一種として追加するだけです:

<asp:ListItem>No department entered</asp:ListItem>
于 2013-05-21T15:00:02.890 に答える
1

存在しないレコードを更新しようとしているようです。そのため、何をしたいかによって、いくつかのオプションがあります。エラーをキャプチャして、編集する前に新しいレコードを作成する必要があることをユーザーにわかりやすいアラートで表示できます。または、エラーをキャプチャして、エラーが発生した場合に挿入コマンドを実行することもできます。または、エラーが一緒に発生するのを防ぐことができます。これが私の提案です。コード ビハインドでは、dropdowlist イベントが発生したときに、ID を取得してクエリを実行し、レコードが存在するかどうかを確認します。その場合は、更新してください。そうでない場合は、ユーザーに警告するか、挿入を行うことができます。これを行う方法について具体的な質問がある場合は、お知らせください。

于 2013-05-21T14:54:56.330 に答える