ASP.net 2.0 vb で DropDownList から値を事前に選択しようとすると、ランタイム エラーが発生するのはなぜですか?
GridView で同じことをしようとしましたが、同じメッセージが表示されます。
最初に、アクセスを申請するために送信した詳細をユーザーに表示しようとしています。編集ボタンをクリックすると、ユーザーが送信した詳細を変更してアプリケーションを更新できるようにしたいと考えています。データベースに追加の挿入を行うつもりはありません。
ユーザーが DropDownList から部門を選択するように制限したかったのです。ユーザーが編集をクリックすると、最初に応募した部門が事前に選択されます。私が行を持っているとき:
SelectedValue='<%# Bind("department") %>'
ランタイム エラーが発生します。行を削除すると、エラーにはなりませんが、何も事前選択されません。
なぜそれが機能しないのかを理解するのを手伝ってくれる人はいますか?
私が Visual Studio 2005 を使用していて、入力時にクラス プロパティが表示されていることが役立つかもしれません。スペースバーを押すと、DropDownList の多くのプロパティが表示されますが、SelectedValue はそれらのプロパティの 1 つではなく、機能しないはずのことをしようとしていると思われます。
私のコード:
<asp:SqlDataSource ID="UserDetails_Conn" runat="server"
ConnectionString="<%$ ConnectionStrings:NormCon %>"
SelectCommand="SELECT u.first_name, u.last_name, u.email, d.department FROM mis_userlist AS u INNER JOIN mis_depts AS d ON u.dept_id = d.dept_id WHERE (u.windows_login = @windows_ID)"
UpdateCommand="UPDATE mis_userlist SET first_name = @first_name, last_name = @last_name, email = @email, dept_id = @dept_id WHERE (windows_login = @windows_ID)"
>
<SelectParameters>
<asp:SessionParameter Name="windows_ID" SessionField="username" />
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="first_name" />
<asp:Parameter Name="last_name" />
<asp:Parameter Name="email" />
<asp:Parameter Name="dept_id" />
<asp:Parameter Name="windows_ID" />
</UpdateParameters>
</asp:SqlDataSource>
<asp:DetailsView ID="UserDetailsView" runat="server" Height="50px" Width="125px" AutoGenerateRows="False" DataSourceID="UserDetails_Conn">
<Fields>
<asp:BoundField DataField="first_name" HeaderText="first_name" SortExpression="first_name" />
<asp:BoundField DataField="last_name" HeaderText="last_name" SortExpression="last_name" />
<asp:BoundField DataField="email" HeaderText="email" SortExpression="email" />
<asp:TemplateField HeaderText="department" SortExpression="department">
<EditItemTemplate>
<asp:SqlDataSource ID="DepartmentList" runat="server"
ConnectionString="<%$ ConnectionStrings:NormCon %>"
SelectCommand="SELECT dept_id, department FROM mis_depts ORDER BY department"
>
</asp:SqlDataSource>
<asp:DropDownList ID="ddlDepartments" runat="server"
DataSourceId="DepartmentList"
DataTextField="department"
DataValueField="dept_id"
SelectedValue='<%# Bind("department") %>' > <!-- Errorsome line -->
</asp:DropDownList>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("department") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("department") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowEditButton="True" />
</Fields>
</asp:DetailsView>
解決
Win のソリューションに加えて、SQL 文字列に dept_id フィールドを追加する必要がありました。
SelectCommand="SELECT u.first_name, u.last_name, u.email, d.department, d.dept_id FROM mis_userlist AS u INNER JOIN mis_depts AS d ON u.dept_id = d.dept_id WHERE (u.windows_login = @windows_ID)"
これにより、次のように部門を表す
ことができました。
ウィンのおかげです。