页面文件:
<div>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" SkinID="gvSkin" OnRowCreated="GridView1_RowCreated" OnRowDataBound="GridView1_RowDataBound" DataKeyNames="MaterialType_No" DataSourceID="SqlDataSource1">
            <Columns>
                <asp:TemplateField HeaderText="类型编码">
                    <HeaderStyle Width="200px" />
                    <ItemTemplate>
                        <asp:TextBox ID="tbxNo" runat="server" Text='<%# Bind("MaterialType_No") %>'></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="类型名称">
                    <HeaderStyle Width="200px" />
                    <ItemTemplate>
                        <asp:TextBox ID="tbxName" runat="server" Text='<%# Bind("MaterialType_Name") %>'></asp:TextBox>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="物料大类">
                    <HeaderStyle Width="200px" />
                    <ItemTemplate>
                        <asp:DropDownList ID="ddlClass" runat="server">
                        <asp:ListItem Value="0">Raw Materials</asp:ListItem>
<asp:ListItem Value="1">Finished Products</asp:ListItem>
<asp:ListItem Value="2">Semi Products</asp:ListItem>
<asp:ListItem Value="3">Accessorial Materials</asp:ListItem>
<asp:ListItem Value="4">Other Materials</asp:ListItem>
                        </asp:DropDownList>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:strConn %>"
            SelectCommand="SELECT * FROM [MaterialType]" UpdateCommand="UPDATE [MaterialType] SET [MaterialType_Name] = @MaterialType_Name, [MaterialType_Class] = @MaterialType_Class WHERE [MaterialType_No] = @MaterialType_No">
        </asp:SqlDataSource>
        <asp:Button ID="btnUpt" runat="server" Text="Update" OnClick="btnUpt_Click" />
        &nbsp;&nbsp;
    </div>后台文件:
 protected void Page_Load(object sender, EventArgs e)
    {    }    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if(e.Row.RowType == DataControlRowType.DataRow)
        {
            System.Data.DataRowView drv = (System.Data.DataRowView)e.Row.DataItem;
            DropDownList ddl = (DropDownList)e.Row.FindControl("ddlClass");
            if (ddl != null)
            {
                ddl.Items.FindByValue(drv["MaterialType_Class"].ToString()).Selected = true;
            }            
        }
    }
    protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
    {    }    protected void btnUpt_Click(object sender, EventArgs e)
    {
        foreach(GridViewRow gvr in GridView1.Rows)
        {
            SqlDataSource1.UpdateParameters.Add(new Parameter("@MaterialType_No", TypeCode.String, GridView1.DataKeys[gvr.DataItemIndex].Value.ToString()));
            SqlDataSource1.UpdateParameters.Add(new Parameter("@MaterialType_Name", TypeCode.String, ((TextBox)gvr.FindControl("tbxName")).Text));
            SqlDataSource1.UpdateParameters.Add(new Parameter("@MaterialType_Class", TypeCode.String, ((DropDownList)gvr.FindControl("ddlClass")).SelectedValue));
            SqlDataSource1.Update();
            SqlDataSource1.UpdateParameters.Clear();
        }
        Response.Redirect(Request.UrlReferrer.ToString());
    }

解决方案 »

  1.   

    必须声明标量变量 "@MaterialType_Name"。 
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.Data.SqlClient.SqlException: 必须声明标量变量 "@MaterialType_Name"。Source Error: 
    Line 41:             SqlDataSource1.UpdateParameters.Add(new Parameter("@MaterialType_Name", TypeCode.String, ((TextBox)gvr.FindControl("tbxName")).Text));
    Line 42:             SqlDataSource1.UpdateParameters.Add(new Parameter("@MaterialType_Class", TypeCode.String, ((DropDownList)gvr.FindControl("ddlClass")).SelectedValue));
    Line 43:             SqlDataSource1.Update();
    Line 44:             SqlDataSource1.UpdateParameters.Clear();
    Line 45:         }
     
    Source File: f:\MIS2005\SupertexERP\study\Views\MultiEdit.aspx.cs    Line: 43 总是提示:必须声明标量变量 "@MaterialType_Name"。 
    请赐教!
      

  2.   

    可以正常浏览 ;点击 修改 按钮 就出错 :必须声明标量变量 "@MaterialType_Name"。
      

  3.   

    LZ看看你代码中的下面这句就明白了 SelectCommand="SELECT * FROM [MaterialType]" UpdateCommand="UPDATE [MaterialType] SET [MaterialType_Name] = @MaterialType_Name, [MaterialType_Class] = @MaterialType_Class WHERE [MaterialType_No] = @MaterialType_No">
    类似@MaterialType_Name都是数据库的变量名,从你的代码中没有看到声明的语句呀!!!!
    即然是udpateCommand也不能把数据库的变量名写出来呀,你可以从网上找其的例子,这种例子很多的
      

  4.   

    sql server使用SqlDataSource1.UpdateParameters.Add(new Parameter("MaterialType_No", TypeCode.String, GridView1.DataKeys[gvr.DataItemIndex].Value.ToString()));
    SqlDataSource1.UpdateParameters.Add(new Parameter("MaterialType_Name", TypeCode.String, ((TextBox)gvr.FindControl("tbxName")).Text));
    SqlDataSource1.UpdateParameters.Add(new Parameter("MaterialType_Class", TypeCode.String, ((DropDownList)gvr.FindControl("ddlClass")).SelectedValue));