5

私は ASP.NET/C# の初心者ですが、できる限り自分の問題を説明するために最善を尽くします。

これで、SQL ソースがアタッチされたグリッドビューができました。正しい情報を掴みます。グリッドビューの情報は、グリッドの外側にあるドロップダウン リストで選択されているものに応じて変化します。これは機能します。問題は、更新と挿入にあります。

一度アップデートを試みます。(列の 1 つで [編集] をクリックするとすぐに) 次のエラー メッセージが表示されます。パラメータ名: 値

以下に示すように、列をテンプレートに分割して、管理しやすくしました。「ドロップダウン リスト 2」は編集テンプレートにあります。データソースに接続されています。これは、問題なく動作する最初のドロップダウン メニューとまったく同じソースです。したがって、それがその手順の背後にあるSQLになるとは思いません。ただし、このドロップダウンリスト 2 は Doctor にバインドされています。 今バインドするように言われたので、バインドの仕組みがわかりません

バインドを解除すると、少なくとも [編集] をクリックした後もグリッドを表示できますが、更新後に次のエラー メッセージが表示されます。

今、オンラインで解決策を探しましたが、バインディングについて頭を悩ませることはできません。必要に応じて、次のコードを示します。

ASP:

<asp:SqlDataSource ID="sdPatient" runat="server" ConnectionString="<%$ ConnectionStrings:MedicalOfficeConnectionString %>" DeleteCommand="usp_PatientDelete" InsertCommand="uspPatientInsert" SelectCommand="uspPatientSelectByIDOrSelectAll" UpdateCommand="uspPatientUpdate" SelectCommandType="StoredProcedure" DeleteCommandType="StoredProcedure" InsertCommandType="StoredProcedure" UpdateCommandType="StoredProcedure">
                <DeleteParameters>
                    <asp:Parameter Name="ID" Type="Int32" />
                </DeleteParameters>
                <InsertParameters>
                    <asp:Parameter Name="OHIP" Type="String" />
                    <asp:Parameter Name="FirstName" Type="String" />
                    <asp:Parameter Name="LastName" Type="String" />
                    <asp:Parameter DbType="Date" Name="DOB" />
                    <asp:Parameter Name="VisitsPerYear" Type="Int32" />
                    <asp:Parameter Name="DoctorID" Type="Int32" />
                    <asp:Parameter Name="Timestamp" Type="Byte"></asp:Parameter>
                </InsertParameters>
                <SelectParameters>
                    <asp:ControlParameter ControlID="DropDownList1" Name="DoctorID" PropertyName="SelectedValue" Type="Int32" DefaultValue="0" />
                </SelectParameters>
                <UpdateParameters>
                    <asp:Parameter Name="ID" Type="Int32" />
                    <asp:Parameter Name="OHIP" Type="String" />
                    <asp:Parameter Name="FirstName" Type="String" />
                    <asp:Parameter Name="LastName" Type="String" />
                    <asp:Parameter DbType="Date" Name="DOB" />
                    <asp:Parameter Name="VisitsPerYear" Type="Int32" />
                    <asp:Parameter Name="DoctorID" Type="Int32" />
                    <asp:Parameter Name="ID" Type="Int32" />
                    <asp:Parameter Name="Timestamp" Type="Byte"></asp:Parameter>
                </UpdateParameters>
            </asp:SqlDataSource>
            <p>Select Patient By Doctor:<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" DataSourceID="sdDoctorList" DataTextField="Doctor" DataValueField="ID" AppendDataBoundItems="True">
                <asp:ListItem Value="0">All Doctors</asp:ListItem>
                </asp:DropDownList>
            <asp:GridView ID="GridView1" runat="server" AllowSorting="True" AutoGenerateColumns="False" BackColor="White" BorderColor="#336666" BorderStyle="Double" BorderWidth="3px" CellPadding="4" DataSourceID="sdPatient" GridLines="Horizontal">
                    <Columns>
                        <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
                        <asp:TemplateField HeaderText="OHIP" SortExpression="OHIP">
                            <EditItemTemplate>
                                <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("OHIP") %>'></asp:TextBox>
                            </EditItemTemplate>
                            <ItemTemplate>
                                <asp:Label ID="Label1" runat="server" Text='<%# Bind("OHIP") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="First Name" SortExpression="FirstName">
                            <EditItemTemplate>
                                <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("FirstName") %>'></asp:TextBox>
                            </EditItemTemplate>
                            <ItemTemplate>
                                <asp:Label ID="Label2" runat="server" Text='<%# Bind("FirstName") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Last Name" SortExpression="LastName">
                            <EditItemTemplate>
                                <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("LastName") %>'></asp:TextBox>
                            </EditItemTemplate>
                            <ItemTemplate>
                                <asp:Label ID="Label3" runat="server" Text='<%# Bind("LastName") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="DOB" SortExpression="DOB">
                            <EditItemTemplate>
                                <asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("DOB") %>'></asp:TextBox>
                            </EditItemTemplate>
                            <ItemTemplate>
                                <asp:Label ID="Label4" runat="server" Text='<%# Bind("DOB") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Visits Per Year" SortExpression="VisitsPerYear">
                            <EditItemTemplate>
                                <asp:TextBox ID="TextBox5" runat="server" Text='<%# Bind("VisitsPerYear") %>'></asp:TextBox>
                            </EditItemTemplate>
                            <ItemTemplate>
                                <asp:Label ID="Label5" runat="server" Text='<%# Bind("VisitsPerYear") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Doctor" SortExpression="Doctor">
                            <EditItemTemplate>
                                <asp:DropDownList ID="DropDownList2" runat="server" DataSourceID="sdDoctorList" DataTextField="Doctor" DataValueField="ID"  SelectedValue='<%# Bind("Doctor") %>'>
                                </asp:DropDownList>
                            </EditItemTemplate>
                            <ItemTemplate>
                                <asp:Label ID="Label6" runat="server" Text='<%# Bind("Doctor") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                    <FooterStyle BackColor="White" ForeColor="#333333" />
                    <HeaderStyle BackColor="#336666" Font-Bold="True" ForeColor="White" />
                    <PagerStyle BackColor="#336666" ForeColor="White" HorizontalAlign="Center" />
                    <RowStyle BackColor="White" ForeColor="#333333" />
                    <SelectedRowStyle BackColor="#339966" Font-Bold="True" ForeColor="White" />
                    <SortedAscendingCellStyle BackColor="#F7F7F7" />
                    <SortedAscendingHeaderStyle BackColor="#487575" />
                    <SortedDescendingCellStyle BackColor="#E5E5E5" />
                    <SortedDescendingHeaderStyle BackColor="#275353" />
                </asp:GridView>

手順:

これはドロップダウンリスト用です。これにより、名前と値が得られます。*注意: この手順は最初のドロップダウン リストで機能し、2 番目のドロップダウン リストでも機能すると思います。

ALTER PROCEDURE dbo.uspDoctorList
AS
BEGIN
    SET NOCOUNT ON
    SELECT     ID, LastName +', ' + FirstName AS 'Doctor'
    FROM         Doctor
    ORDER BY 'Doctor'
END

アップデート手順です。これに問題があるのか​​ 、それとも私のASPだけなのかはわかりません

ALTER PROCEDURE dbo.uspPatientUpdate
    @ID int,
    @OHIP char(10),
    @FirstName nvarchar(20),
    @LastName nvarchar(40),
    @DOB date,
    @VisitsPerYear int,
    @DoctorID int,
    @Timestamp Timestamp

AS
BEGIN
    SET NOCOUNT OFF
    UPDATE Patient
    SET OHIP = @OHIP,
      FirstName = @FirstName, 
      LastName = @LastName,
      DOB = @DOB,
      VisitsPerYear = @VisitsPerYear,
      DoctorID = @DoctorID
    WHERE ID = @ID AND Timestamp = @Timestamp
END

どんな助けにも感謝します。ところで、これは私たちが教えられたものよりも少し進んでいます (ASP でストアド プロシージャを使用)。

さらに情報が必要な場合は、お問い合わせください

4

2 に答える 2

1

Your error are with dropdown and parameter related to stored procedure so to bind a drop down with data from database- (I am writing this code by thinking that you have the basic knowledge of asp.net using three tier) Make a class in Appcode folder and write foll method

**SqlConnection con;
SqlCommand cmd;
SqlDataAdapter da;
private void Openconnection()
{
    if (con == null)
    {
        con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Nameofconn_defin in web.config file"].ConnectionString);
        if (con.State == ConnectionState.Closed)
        {
            con.Open();
        }
        cmd = new SqlCommand();
        cmd.Connection = con;
    }
}
private void Closeconnection()
{
    if (con.State == ConnectionState.Open)
    {
        con.Close();
    }
}
private void Disposeconnection()
{
    if (con != null)
    {
        con.Dispose();
        con = null;
    }
}

public DataTable GetDatatable(string strsql) { Openconnection(); DataTable dt = new DataTable(); cmd.CommandType = CommandType.Text; cmd.CommandText = strsql; cmd.CommandTimeout = 1000; da = new SqlDataAdapter(); da.SelectCommand = cmd; da.Fill(dt); Closeconnection(); Disposeconnection(); return dt; }

Than in ASPX.CS FILE Write a method

public void BindBacecurrency()
    {
        try
        {
            string str = "select * from Currency_Master";
            DataTable dt = dut.GetDatatable(str);
            ddlbasecurrency.DataSource = dt;
            ddlbasecurrency.DataValueField = dt.Columns["Currency_Id"].ToString();
            ddlbasecurrency.DataTextField = dt.Columns["Currency_Name"].ToString();
            ddlbasecurrency.DataBind();
            ddlbasecurrency.Items.Insert(0, "-------Select-------");


        }
        catch (Exception ex)
        {
            Response.Write(ex.Message.ToString());
            ScriptManager.RegisterStartupScript(this, this.GetType(), "message", "<script> alert('System Error ! Contact Your Service Provider ');</script>", false);
        }
    }

To bind it manually i.e Not from database ,than write in HTML Page of your Design Page

<asp:DropDownList ID="ddBalanceType" runat="server"  BackColor="#AFC7C7" class ="small-field size5" >
               <asp:ListItem  Text="-------------Select-------------"></asp:ListItem>
               <asp:ListItem Value="1" Text="CR"></asp:ListItem>
               <asp:ListItem Value="0" Text="DR"></asp:ListItem>
            </asp:DropDownList>

I can show you how to update using parameters and codes using 3 Tier Architecture but First i have to know that you are understanding my codes or not any way check the below code for gridview and stored procedure may this help you

 <asp:TemplateField HeaderText="Function" ItemStyle-HorizontalAlign="Center">
                        <ItemTemplate>
                            <asp:LinkButton ID="btnEdit" runat="server" ToolTip='<%# Eval("party_id") %>' onclick="btnEdit_Click" >Edit</asp:LinkButton>

                        </ItemTemplate>
                        <ItemStyle HorizontalAlign="Center" />
                    </asp:TemplateField>

------For Edit Buton click---------

       protected void btnEdit_Click(object sender, EventArgs e)
        {
            try
            {
                Blank();
                GridViewRow gvrows = (GridViewRow)(((Control)sender).NamingContainer);
                LinkButton linkbtn = (LinkButton)gvrows.FindControl("btnEdit");
    string PartyId = linkbtn.ToolTip.ToString();
     string Com = "SELECT * FROM Transport_Mode WHERE party_id = '" + PartyId.ToString() + "' ORDER BY mode_id ASC ";
                DataTable dt2 = dut.GetDatatable(Com);--check above method in bal class
}
}

--------Sample code for stored procedure------

    USE [Aesthetics1]
GO
/****** Object:  StoredProcedure [dbo].[OSP_InsUpdBankMaster]    Script Date: 04/08/2013 17:55:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[OSP_InsUpdBankMaster]
(
    @Bank_id int =null,
    @Bank_name varchar(30) =null,
    @account_no varchar(20) =null,
    @holder_name varchar(40) =null,
    @Branch varchar(25) =null,
    @status int =null,
    @add_user varchar(8) =null,
    @Result int = 0output
)
AS
BEGIN
BEGIN TRANSACTION
    IF NOT EXISTS (SELECT 1 FROM Bank_master WHERE Bank_id = @Bank_id)
    BEGIN
        INSERT INTO Bank_master (Bank_name,account_no,holder_name,Branch,status,add_date,add_user) 
        VALUES (@Bank_name,@account_no,@holder_name,@Branch,@status,GETDATE(),@add_user)

        SET @Result = 1
    END
    ELSE IF EXISTS (SELECT 1 FROM Bank_master WHERE Bank_id = @Bank_id)
    BEGIN
        UPDATE Bank_master SET Bank_name = @Bank_name,
                                account_no = @account_no,
                                holder_name = @holder_name,
                                Branch = @Branch,
                                status = @status
                    where Bank_id = @Bank_id    
                SET @Result = 2
    END
IF @@ERROR = 0
COMMIT TRANSACTION
ELSE
BEGIN
    SET @Result = -1
    ROLLBACK TRANSACTION
END
END
于 2013-04-08T12:29:32.003 に答える