0

ASP:DropDownList の値を使用して ASP.Net DetailsView からデータベースにデータを更新しようとしていますが、ユーザーが [更新] ボタンをクリックしても何も起こりません。[キャンセル] ボタンのみが機能します。

DropDownList には、読み込まれたデータベースのデータが表示されますが、更新はできません。

マークアップのコーディングから何かが欠けていると思います。

DropDownList のマークアップは次のとおりです。

<asp:TemplateField HeaderText="Class:" SortExpression="ClassID">

    <EditItemTemplate>
        <asp:DropDownList 
            ID="DropDownListClass" 
            Runat="server"
            DataSourceID="SqlDataSourceClasses"
            DataTextField = "ClassName"
            DataValueField="ID"
            AutoPostBack="True" 
            AppendDataBoundItems="true">
        </asp:DropDownList>

        <asp:RequiredFieldValidator ID="RequiredFieldValidatorEditDropDownListClass" runat="server" 
            ControlToValidate="DropDownListClass" 
            ErrorMessage="Please select a class." Font-Bold="True" Font-Italic="True" ForeColor="Red" 
            SetFocusOnError="True" Display="Dynamic">
        </asp:RequiredFieldValidator>
    </EditItemTemplate>

    <ItemTemplate>
        <asp:Literal ID="LiteralClass" runat="server" 
            Text='<%# FormatAsMixedCase(Eval("ClassName").ToString())%>' />
    </ItemTemplate>

    <ItemStyle ForeColor="Blue" />
</asp:TemplateField>

これは、単純なルックアップ テーブルである DataSource のマークアップです。

<asp:SqlDataSource 
    ID="SqlDataSourceClasses" 
    runat="server" 

    ConnectionString="<%$ ConnectionStrings:Islamic Knowledge Academy Staff System %>" 

    SelectCommand="SELECT [ID], [ClassName], [Grade] FROM [Classes]">
</asp:SqlDataSource>
4

1 に答える 1

1

Emad-ud-den、

クライアントがサーバーにポストバックしたときにデータベースを更新することを認識できるように、送信ボタンにはクリックハンドラーが必要だと思います。次のようなもの:

Sub btnUpdate_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUpdate.Click

    Dim cnAD As New System.Data.SqlClient.SqlConnection = yourdatasource.getConnection("SqlDataSourceClasses", cnAD)
    Dim cmd As New SqlCommand
    cmd.Connection = cnAd
    cmd.CommandType.Text
    cmd.CommandText = "update yourtable set yourval=@val where yourparams"
    cmd.Paramaters.AddWithValue("@val", DropDownListClass.SelectedValue)
    cmd.ExecuteNonQuery()

End Sub

try-catchを追加して、コードがどこでうまくいかないかについてより良いアイデアを得ることができます。私が書いたものはそのままでは機能しませんが、正しい方向を示すことを目的としていることに注意してください。

于 2012-12-13T17:49:04.043 に答える