简体   繁体   English

3层代码的asp.net中的sqldatasource不支持更新

[英]updating is not supported by sqldatasource in asp.net for 3 layered code

Am Updating the gridview with codebehind and stored procedure with 3 layers. 我使用3层代码隐藏和存储过程来更新gridview。 I am having trouble while displaying,( Updating is not supported by data source 'SqlDataSource2' unless UpdateCommand is specified. ) but updating is done to database. 我在显示时遇到麻烦,( 除非指定了UpdateCommand,否则数据源'SqlDataSource2'不支持更新。 )但是对数据库进行了更新。 Here is my code 这是我的代码

<asp:gridview runat="server" AutoGenerateColumns="False" CellPadding="4" OnRowCommand = "GVEditRate_Command"
    ForeColor="#333333" GridLines="None" ID="GVEditRate" OnRowUpdating ="GVEditRate_OnRowUpdating"
    DataSourceID="SqlDataSource2" >

.... ....

    SelectCommand="SELECT [Bill_Item], [Rate_Cat_Id], [Item_Rate], [Professional_Charge], [Anes_Charge], [Effective_Date] FROM [Rate_M] WHERE (([Active_Flag] = @Active_Flag) AND ([Bill_Item] = @Bill_Item))" >

    <SelectParameters>
        <asp:Parameter DefaultValue="Y" Name="Active_Flag" Type="String" />
        <asp:ControlParameter ControlID="TB_ItemCode" Name="Bill_Item" 
            PropertyName="Text" Type="String" />
    </SelectParameters>

Code behind 后面的代码

protected void GVEditRate_OnRowUpdating(object sender, GridViewUpdateEventArgs e)
{
    Business bz = new Business();
    rate_data rd = new rate_data();
    rd.itemcode = (GVEditRate.Rows[e.RowIndex].FindControl("Label1") as Label).Text;
    rd.ratecategory = (GVEditRate.Rows[e.RowIndex].FindControl("Label2") as Label).Text;
    string itmrt = (GVEditRate.Rows[e.RowIndex].FindControl("TextBox1") as TextBox).Text;
    rd.itemrate = Convert.ToDouble(itmrt);
    string prf = (GVEditRate.Rows[e.RowIndex].FindControl("TextBox2") as TextBox).Text;
    rd.profesionalchg = Convert.ToDouble(prf);
    string anes = (GVEditRate.Rows[e.RowIndex].FindControl("TextBox3") as TextBox).Text;
    rd.ansthcharge = Convert.ToDouble(anes);
    rd.effective_date = DateTime.Now;
    rd.LogId = Convert.ToDouble(Session["LogId"]);
    rd.ShiftId = Convert.ToInt16(Session["ShiftID"]);
    rd.Userid = Convert.ToString(Session["User"]);
    rd.Actv_flag = "Y";
    int upd_rate = bz.update_rate(rd);
    if (upd_rate > 0)
    {
        ClientScript.RegisterStartupScript(Page.GetType(), "validation",
                "<script language='javascript'>alert('Rate updation successful')</script>");
    }
    else
    {
        ClientScript.RegisterStartupScript(Page.GetType(), "validation",
       "<script language='javascript'>alert('could not update rate')</script>");

    }
}

The error message ist telling you, that you need to define a UpdateCommand for your datasource. 错误消息告诉您,您需要为数据源定义一个UpdateCommand

You have defined a SelectCommand, so your application knows how to retrieve data. 您已经定义了SelectCommand,因此您的应用程序知道如何检索数据。 But it does not know how to update or insert data, since you did not have it specified. 但是它不知道如何更新或插入数据,因为您没有指定它。

Check your SQLDataSource and insert the appropriate command: 检查您的SQLDataSource并插入适当的命令:

<asp:SqlDataSource
     id="SqlDataSource2"
     runat="server"
     SelectCommand="SELECT [Bill_Item], [Rate_Cat_Id], [Item_Rate], [Professional_Charge], [Anes_Charge], [Effective_Date] FROM [Rate_M] WHERE (([Active_Flag] = @Active_Flag) AND ([Bill_Item] = @Bill_Item))"
     UpdateCommand="INSERT Stored Procedure here">
     UpdateCommandType="StoredProcedure"
      /* ... */>
       <UpdateParameters>                
            <asp:Parameter Direction="Output" Name="Name1" Type="Int32" />
            <asp:Parameter Direction="Output" Name="Name2" Type="Int32" />
            <asp:Parameter Direction="Output" Name="Name3" Type="Int32" />
       </UpdateParameters>
</asp:SqlDataSource>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM