2

Formview 経由でデータベースにデータを挿入しようとしています:

<asp:FormView ID="FormView3" runat="server" DataSourceID="SqlDataSource2" RenderOuterTable="False"
        DefaultMode="Insert">
        <InsertItemTemplate>
            Name:
            <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Name") %>'></asp:TextBox>
            <br />
            E-mail:
            <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Email") %>'></asp:TextBox>
            <br />
            Website:
            <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("Website") %>'></asp:TextBox>
            <br />
            Comment:
            <asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("Comment") %>'></asp:TextBox>
            <br />
            <asp:Button ID="postcomment" runat="server" Text="Button" OnClick="postcomment_Click" />
        </InsertItemTemplate>
    </asp:FormView>

挿入するボタンを作成しようとしましたが、ここに私のイベントがあります:

protected void postcomment_Click(object sender, EventArgs e)
    {
        FormView3.InsertItem(true);
    }

しかし、これは何もしていないようです。私は何を間違っていますか?挿入/キャンセルを自動的に構築する他のデータバインドコントロールの経験しかありません。

編集:

これは、Jupaol のアドバイスに従った後の結果です。

<asp:FormView ID="FormView3" runat="server" DataSourceID="SqlDataSource4" RenderOuterTable="False" DefaultMode="Insert">
        <InsertItemTemplate>
            Name:
            <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Name") %>'></asp:TextBox>
            <br />
            E-mail:
            <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Email") %>'></asp:TextBox>
            <br />
            Website:
            <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("Website") %>'></asp:TextBox>
            <br />
            Comment:
            <asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("Comment") %>'></asp:TextBox>
            <br />
            pid:
            <asp:TextBox ID="TextBox5" runat="server" Text='<%# Bind("PostId") %>'></asp:TextBox>
            <br />
            <asp:Button ID="postcomment" runat="server" Text="Button" CommandName="Insert" />
        </InsertItemTemplate>
    </asp:FormView>

SQL データソース:

<asp:SqlDataSource ID="SqlDataSource4" runat="server" 
        ConnectionString="<%$ ConnectionStrings:orangefreshConnectionString1 %>" 
        DeleteCommand="DELETE FROM [Comment] WHERE [Id] = @Id" 
        InsertCommand="INSERT INTO [Comment] ([Name], [Email], [Website], [Comment], [PostId]) VALUES (@Name, @Email, @Website, @Comment, @PostId)" 
        SelectCommand="SELECT [Name], [Email], [Website], [Comment], [PostId], [Id] FROM [Comment]" 
        UpdateCommand="UPDATE [Comment] SET [Name] = @Name, [Email] = @Email, [Website] = @Website, [Comment] = @Comment, [PostId] = @PostId WHERE [Id] = @Id">

それでも、挿入ボタンをクリックしても何も起こりません-ポストバックがあるようですが、テーブルにエントリが作成されません(ページに打ち込んだ値はまだテキストボックスにあります)

4

2 に答える 2

4

私はあなたのために完全に機能する例を作成しました。この場合、マスター/詳細シナリオをシミュレートするためのリストを作成しました:(私はPUBSデータベースサンプルを使用しています)

出力

ここに画像の説明を入力してください

ASPX

    <asp:SqlDataSource runat="server" ID="sqds"
        ConnectionString="<%$ ConnectionStrings: ds %>"
        DataSourceMode="DataSet"
        SelectCommand="select * from jobs"
    >

    </asp:SqlDataSource>
    <asp:GridView runat="server" DataSourceID="sqds" ID="gv" DataKeyNames="job_id">
        <Columns>
            <asp:CommandField ShowSelectButton="true" />
        </Columns>
        <SelectedRowStyle Font-Bold="true" />
    </asp:GridView>

    <asp:SqlDataSource runat="server" ID="sqds2"
        ConnectionString="<%$ ConnectionStrings: ds %>"
        DataSourceMode="DataSet"
        SelectCommand="select * from jobs where job_id = @JobID"
        InsertCommand="insert into jobs (job_desc, min_lvl, max_lvl) values (@job_desc, @min_lvl, @max_lvl)"
    >
        <SelectParameters>
            <asp:ControlParameter ControlID="gv" DefaultValue="0" Name="JobID" PropertyName="SelectedValue" Type="Int16" />
        </SelectParameters>
        <InsertParameters>
            <asp:Parameter Name="job_desc" Type="String" />
            <asp:Parameter Name="min_lvl" Type="Int16" />
            <asp:Parameter Name="max_lvl" Type="Int16" />
        </InsertParameters>
    </asp:SqlDataSource>
    <asp:FormView runat="server" ID="fv" DataSourceID="sqds2" DefaultMode="Insert" 
        oniteminserted="fv_ItemInserted">
        <ItemTemplate>
            <b>Job Description:</b> <asp:Label Text='<%# Eval("job_desc") %>' runat="server" />
            <asp:Button Text="New" runat="server" CommandName="New" />
        </ItemTemplate>
        <InsertItemTemplate>
           <div>
                <b>Job Description</b>: <asp:TextBox ID="jobDescription" runat="server" Text='<%# Bind("job_desc") %>' />
            </div>
            <div>
                <b>Minimum level</b>: <asp:TextBox ID="minimumLevel" runat="server" Text='<%# Bind("min_lvl") %>' />
            </div>
            <div>
                <b>Maximum level</b>: <asp:TextBox ID="maximumLevel" runat="server" Text='<%# Bind("max_lvl") %>' />
            </div>
            <asp:Button Text="Insert" runat="server" CommandName="Insert" />
        </InsertItemTemplate>
    </asp:FormView>

ASPXコードビハインド

    protected void fv_ItemInserted(object sender, FormViewInsertedEventArgs e)
    {
        this.gv.DataBind();
    }
于 2012-08-12T17:21:56.533 に答える
0

FormView1_ItemCommand を使用して確認する必要があります

サンプルコードはこちら

http://www.codeproject.com/Articles/43780/Taming-the-FormView-Understanding-how-to-Implement

于 2012-08-12T15:50:19.483 に答える