gpt4 book ai didi

c# - ASP :SqlDataSource SelectCommand property does not persist when paging

转载 作者:太空宇宙 更新时间:2023-11-03 11:01:29 25 4
gpt4 key购买 nike

我有一个 GridView (gvPart),它的数据源是 SqlDataSource (sdsParts)。在 gvPart 上,我有属性 AllowPaging="true"。我还有一个 TextBox (txtPartSearch) 和一个 Button,用于通过 gvPart 输入和执行搜索。为此,我在后面的代码中有以下内容:

protected void partSearch(object sender, EventArgs e)
{
string query = txtPartSearch.Text;
string selectCmd = "SELECT ... WHERE partnum LIKE '" + query + "%' ... "; // I have cut out most of the statement for clarity
sdsParts.SelectCommand = selectCmd;
gvPart.DataBind();
}

这样做的目的是允许用户输入部件编号,并让 gvPart 仅显示与查询匹配的部件而不是整个列表。

通过上述方法后gvPart的第一页符合预期。但是,如果这个 select 语句在 gvPart 中产生了多页,点击页脚中的第 2 页将显示第二页,但数据将来自原始数据的第 2 页(即,搜索前最初拉取的数据,使用 sdsParts 中的默认 SelectCommand

似乎分页“重置”了 SqlDataSource 并使用了用 Default.aspx 编写的 SelectCommand,而不管任何 sdsParts.SelectCommand = selectCmd声明。

我试过完全不使用 SelectCommand,所以 sdsParts 看起来像这样:

<asp:SqlDataSource ID="sdsParts" runat="server" ConnectionString="..." />

然后在Page_Load中添加默认的:

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string selectCmd = "SELECT ... ";
sdsParts.SelectCommand = selectCmd;
gvPart.DataBind();
}
}

但随后单击 gvPart 中的另一页会使它变成空白,就像 SelectCommand="" 一样。

为什么 sdsPartsSelectCommand 会“重置”,我该如何修复/避免这种情况?

编辑

我的问题已经解决了。对于遇到同样问题来到这里的人,请单击此处获取解决方法的解释和建议。

编辑 将我的上述解决方案移至一个答案以便更清晰

最佳答案

为什么要在后面的代码中更改 SqlDataSource 的 SelectCommand?放在控件中。

其次,您的代码容易受到 SQL 注入(inject)攻击,请不要将用户提供的数据连接到您的 TSQL 中......永远。

举个例子,作为一个快速的痛苦教训,运行你的程序并输入以下代码作为零件号 ';DROP TABLE PARTS;',然后在你哭完之后,然后如果您的老板不解雇您,请更改您的代码。

关于c# - ASP :SqlDataSource SelectCommand property does not persist when paging,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17582930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com