1

我正在尝试在 asp.net web-forms 应用程序中使用 GridView 设置 ObjectDataSource。我计划用于 ObjectDataSource 的 select 命令通过使用存储过程查询数据库来返回 DataTable,如下所示:

public DataTable GetProductsById(string ids = null)
        {

            DataTable productDataTable = new DataTable();

            // Stored procedure (sqldb server) is executed here
            SqlCommand cmd = new SqlCommand("GetProductByIdsRML_CLR", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlParameter myParam = new SqlParameter("@ids", SqlDbType.NVarChar);
            myParam.Value = (ids);
            cmd.Parameters.Add(myParam);
            SqlDataAdapter dataAdapter = new SqlDataAdapter();
            dataAdapter.SelectCommand = cmd;

            dataAdapter.Fill(productDataTable);

            return productDataTable;
        }

该方法将字符串作为参数,该字符串是以逗号分隔的产品 ID 列表,此参数被传递给存储过程,然后执行查询。但是,我无法正确设置它,因为这个输入ids是通过代码中的另一个方法传递给这个方法的。这就是问题所在,因为在尝试设置 ObjectDataSource 时,它​​会询问存储过程的参数应该来自哪里,但“另一种方法”不是一个选项。这就是我所说的: 为对象数据源选择参数

这些选项似乎都没有封装“该项目中的另一种方法”。如果有人知道在这种情况下该怎么做,那就太好了。此外,如果从存储过程返回 DataTable 不是一个好主意,那也没关系,我可以很容易地改变它,但问题仍然存在。谢谢!我觉得有一个非常简单的解决方案......

4

2 回答 2

1

多亏了 msdn 上的本教程,我才解决了这个问题:

http://msdn.microsoft.com/en-us/library/aa581787.aspx

在文章的最后,它展示了如何在代码中实现我想要做的事情。您从该下拉列表中选择“无”并将参数放在SelectingObjectDataSource 事件后面的代码中,我的看起来像这样:

protected void ObjectDataSource1_Selecting(object sender,
                                           ObjectDataSourceSelectingEventArgs e)
        {
            e.InputParameters["ids"] = SearchResults.idList;
        }

idList我需要传递给存储过程的以逗号分隔的字符串列表在哪里。只要每次都定义了 idList 字段,GridView + ObjectDataSource 几乎可以处理其余部分。

于 2013-07-03T15:12:50.810 回答
0

一种选择是使用Session然后使用该OnLoadComplete方法Page并在其中设置Session变量。

protected override void OnLoadComplete(EventArgs e)
{
    ...
}
于 2013-07-03T14:14:05.460 回答