我正在尝试在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不是一个好主意,那也很好,我可以很容易地改变它,但问题仍然存在。谢谢!我觉得有一个非常简单的解决方案...
答案 0 :(得分:1)
感谢msdn:
上的这个教程,我把它整理好了http://msdn.microsoft.com/en-us/library/aa581787.aspx
在文章的最后,它展示了如何在代码中实现我想要做的事情。您从该下拉列表中选择“无”,并将参数放在ObjectDataSource的Selecting
事件后面的代码中,我的看起来像这样:
protected void ObjectDataSource1_Selecting(object sender,
ObjectDataSourceSelectingEventArgs e)
{
e.InputParameters["ids"] = SearchResults.idList;
}
其中idList
是我需要传递给存储过程的以逗号分隔的字符串列表。只要每次定义idList字段,GridView + ObjectDataSource几乎都会处理剩下的事情。
答案 1 :(得分:0)
一种选择是使用Session
,然后使用OnLoadComplete
的{{1}}方法并在其中设置Page
变量。
Session