如何解决无法返回带有值的 gridview
我正在尝试动态返回一个搜索框,该搜索框将使用参数化的 addwithvalue 函数基于类似 SQL 的函数在表中给出产品名称。
我的 aspx 设计文件如下所示:
我在 aspx.cs 代码背后的代码是这样的。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;
namespace KUD4
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender,EventArgs e)
{
}
protected void Button1_Click(object sender,EventArgs e)
{
string ConnectionString = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
using (SqlConnection connection = new SqlConnection(ConnectionString))
{
SqlCommand cmd = new SqlCommand("Select * from dbo.tblProductInventory where ProductName like @ProductName",connection);
cmd.Parameters.AddWithValue("@ProductName",TextBox1.Text + "%");
connection.Open();
GridView1.DataSource = cmd.ExecuteReader();
GridView1.DataBind();
}
}
}
}
当我尝试在搜索字段中输入任何文本并单击“获取产品”按钮时。网格视图未到达。
我做错了什么?
我的桌子是这样的:
id ProductName QuantityAvailable
101 iPhone 101
102 Apple Laptops 100
103 Books 120
104 Acer Laptops 119
105 iPads 134
解决方法
你所拥有的看起来很不错。但是,强制参数中的数据类型可能是个好主意。
因此我建议你试试这个:
cmd.Parameters.Add("@ProductName",SqlDbType.NVarChar).Value = TextBox1.Text + "%";
虽然编译器会抱怨如果您使用带有 3 个值的“add” - 这是不推荐使用的。但是具有两个值的 .Add() - 强数据类型,并按照上述使用 .Value 并没有以任何方式被弃用,实际上是一个很好的方法。
和相当不错的是,如果你不输入任何内容到该文本框中,然后按搜索按钮,它应该显示所有行。
此外,在您完成时将 + 使用 .ExecuteReader 推入网格也没有问题。
但是,请记住,如果您有数据寻呼机,则必须添加以下内容:
DataTable rstData = new DataTable();
rstData.Load(cmd.ExecuteReader);
GridView1.DataSource = rstData;
GridView1.DataBind();
但是,如果没有数据分页器 - 您所拥有的一切都很好,应该可以工作。
另外一个仅供参考:
你做得很好 - 因为 sql cmd 对象有一个数据阅读器 - 你不需要一个单独的,因为很多例子显示 - 你避免了 - 对你有好处!
然而,sql 命令对象也有一个连接对象!!!因此,您也不需要单独的其中之一!当然,sql cmd 对象也有一个参数对象 - 不需要单独的一个!
没什么大不了的,但结果是你可以这样做:
string ConnectionString = ConfigurationManager.ConnectionStrings("DBCS").ConnectionString;
using (SqlCommand cmd = new SqlCommand("Select * from dbo.tblProductInventory where ProductName like @ProductName",new SqlConnection(ConnectionString)))
{
cmd.Parameters.Add("@ProductName",SqlDbType.NVarChar).Value = TextBox1.Text + "%";
cmd.Connection.Open();
GridView1.DataSource = cmd.ExecuteReader();
GridView1.DataBind();
}
因此 sql 命令对象在一个很棒的小对象中包含了您需要的所有 3 项内容。这也意味着你可以将它传递给其他例程等,或者只是因为这个对象实际上拥有你需要的所有 3 样东西而感到温暖和快乐。读取器、命令和连接对象,以及参数(嗯,这是 4 件事!)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。