【发布时间】:2023-03-17 14:37:02
【问题描述】:
我有一个网格和一个下拉列表,用户可以从中选择要填充网格的查询。 现在它工作正常:
protected void Button1_Click(object sender, EventArgs e)
{
string selected = DropDownList1.SelectedItem.Value;
if (selected == "0")
{
Label1.Text = "You shall select a query!";
}
else
{
int x = Int32.Parse(selected);
string query = "";
switch (x)
{
case 1: //Top 100 TB 321
query = @"...something...";
SqlDataSource1.SelectCommand = query;
break;
case 2:
query = @"....something else....";
SqlDataSource1.SelectCommand = query;
break;
case 3:
.......
}
}
而在标记中,我只是有带有连接字符串的 sqldatsource:
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:BOMConnectionString %>"
></asp:SqlDataSource>
使用上面的代码,我无法导出网格的内容,因为它会生成错误“对象引用未设置为对象的实例”。为了避免这个问题,我应该将查询作为变量传递给标记中的 sqldatasource,而不是从后面的代码中定义 select 命令。 如何将变量“查询”传递给标记中的 sqldatasource SelectCommand?
【问题讨论】:
-
您是否确切地知道 哪里 Null 引用异常(“...未设置为实例...”错误)来自?我可以看到一些可以产生一个的地方。例如,您假设
DropDownList1总是有一个SelectedItem。在任何情况下,都没有客户端 SqlDataSource。这纯粹是服务器端的事情,而且有充分的理由;如果客户端代码可以访问您的数据库,那么任何加载您的 Web 应用程序的人都可以访问您的数据库凭据,并且可以登录并搞砸东西。 -
我用来导出的方法是从 sqldatasource 获取数据,所以在我点击导出的时候,那里没有选择命令。这就是为什么我想在标记中将变量传递给 Sqldatsource 的 SelectCommand。对不起,我的问题中的错误,我现在会更新它。
-
网络应用用户是否点击了“导出”按钮?如果是这样,为什么不让它的处理程序检查 DropDownList 选定值并设置 SelectCommand,就像您在上面的代码中所做的那样?
-
听起来不错。谢谢。
标签: asp.net sqldatasource