Click here to Skip to main content
15,915,508 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
hi i have a page .aspx and class
i bind data from database to gridview with this class.
it's work fine when i use AutoGenerateColumns="True" in Gridview
but when i change AutoGenerateColumns="False" and add TemplateField i get error:

error: The parameterized query '(@FlNm nvarchar(4000),@_ml nvarchar(4000),@_MbN nvarchar(4000),@' expects the parameter '@FlNm', which was not supplied.

.aspx code:

ASP.NET
<%@ Page Language="C#" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:GridView
                ID="grdMovies"
                DataSourceID="src_NwsLtr"
                DataKeyNames="ID_NwsLtr"
                AutoGenerateEditButton="True"
                 AutoGenerateColumns="False"
                runat="server">
               <Columns>
                    <asp:TemplateField HeaderText="Name">
                  <EditItemTemplate>
                      <asp:TextBox runat="server" ID="txtName" Text='<%# Eval("FlNm") %>'></asp:TextBox>
                  </EditItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label2" runat="server" Text='<%# Eval("FlNm") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
                    .............
                    .............
                    ...............

               </Columns>
            </asp:GridView>

            <asp:ObjectDataSource
                ID="src_NwsLtr"
                TypeName="NwsLtr"
                SelectMethod="Get_NwsLtr"
                UpdateMethod="Update_NwsLtr"
                runat="server">
                <UpdateParameters>
                    <asp:Parameter Name="ID_NwsLtr" Type="Int32" />
                    <asp:Parameter Name="FlNm" />
                    <asp:Parameter Name="_ml" />
                    <asp:Parameter Name="_MbN" />
                </UpdateParameters>
            </asp:ObjectDataSource>

        </div>
    </form>
</body>
</html>


my class code:
C#
public class NwsLtr
{
	private readonly string _conString;

    public void Update_NwsLtr(int ID_NwsLtr, string FlNm, string _ml, string _MbN)
    {
        // Create Command
        SqlConnection con = new SqlConnection(_conString);
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandText = "UPDATE Tbl_NwsLtr SET FlNm=@FlNm," +
                                               "_ml=@_ml,"    +
                                               "_MbN=@_MbN"   +
                         " WHERE ID_NwsLtr=@ID_NwsLtr";

        // Add parameters
        cmd.Parameters.AddWithValue("@FlNm", FlNm);
        cmd.Parameters.AddWithValue("@_ml", _ml);
        cmd.Parameters.AddWithValue("@_MbN", _MbN);
        cmd.Parameters.AddWithValue("@ID_NwsLtr", ID_NwsLtr);

        // Execute command
        using (con)
        {
            con.Open();
            cmd.ExecuteNonQuery();
        }
    }

    public SqlDataReader Get_NwsLtr()
    {
        // Create Connection
        SqlConnection con = new SqlConnection(_conString);

        // Create Command
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        cmd.CommandText = "SELECT ID_NwsLtr,FlNm,_ml,_MbN FROM Tbl_NwsLtr";

        // Return DataReader
        con.Open();
        return cmd.ExecuteReader(CommandBehavior.CloseConnection);
    }

    public NwsLtr()
    {
        _conString = WebConfigurationManager.ConnectionStrings["BookDB"].ConnectionString;
    }
}
Posted

1 solution

The issue is about using Bind or Eval.
Such as:
HTML
<asp:TextBox runat="server" ID="txtName" Text='<%# Eval("FlNm") %>'></asp:TextBox>
determines it is not required as a parameter.

NOTE
1. Use Eval if you don't want the field to be an Update Parameter.
2. And use Bind if you want it to be a parameter.

So, the textboxes referring to the below Update Parameters need to have Bind not Eval.
XML
<asp:Parameter Name="ID_NwsLtr" Type="Int32" />
<asp:Parameter Name="FlNm" />
<asp:Parameter Name="_ml" />
<asp:Parameter Name="_MbN" />

Refer - GridView With ObjectDataSource Example Insert Edit Update[^] for one nice example.

Thanks...
 
Share this answer
 
v2
Comments
jiji2663 20-Feb-13 1:46am    
thanks, Tadit Dash
Most welcome... My pleasure. :)

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900