问题描述
hi
i有一个页面.aspx和类
i将数据从数据库绑定到使用此类的gridview。
当我使用它时工作正常GridGe中的AutoGenerateColumns =True
但是当我更改AutoGenerateColumns =False并添加TemplateField时出现错误:
错误:参数化查询''(@FlNm nvarchar(4000),@ _ ml nvarchar(4000),@ _ MbN nvarchar(4000),@''需要参数''@FlNm'',这是未提供的。
.aspx代码:
hii 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:
<%@ 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:
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;
}
}
推荐答案
<asp:TextBox runat="server" ID="txtName" Text='<%# Eval("FlNm") %>'></asp:TextBox>
确定它不是必需的参数。
注意
1.使用 Eval
如果你不希望该字段成为更新参数。
2.并且 使用绑定
如果你想要它作为参数 。
因此,引用以下更新参数的文本框需要 Bind
不是 Eval
。
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
.
<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...
这篇关于错误编辑asp.net中服务器端的Gridview的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!