简体   繁体   English

ASP.NET数据源参数问题

[英]Trouble with ASP.NET data source parameters

I have a GridView and I want to add some more parameters to the DataSource. 我有一个GridView ,我想向数据源添加更多参数。 One of the parameters is called symbols and is a DataTable , and I'm not sure how to add it. 其中一个参数称为symbols ,是一个DataTable ,我不知道如何添加它。 Here's my GridView : 这是我的GridView

<asp:GridView  
    ID="grdTrades" 
    runat="server" 
    DataKeyNames="tradeId"
    DataSource="srcTrades"
    EnablePersistedSelection="true"            
    AllowPaging="true" 
    AllowSorting="true"
    PageSize = "10" 
    AutoGenerateColumns="false"         
    >
    <Columns>
        <asp:BoundField DataField="tradeId" HeaderText="TradeId"  SortExpression="tradeId" />
        ... some more columns ...
    </Columns>
</asp:GridView>

Here's my current data source. 这是我目前的数据来源。

<asp:ObjectDataSource
    id="srcTrades" 
    TypeName="DatabaseComponent.DBUtil" 
    SelectMethod="GetTrades" 
    DeleteMethod="DeleteTrade"             
    runat="server">
    <SelectParameters>
        <asp:ControlParameter Name="tradeTypeId" ControlID="ddlTradeTypes" PropertyName="SelectedValue" />
        <asp:ControlParameter Name="dateFrom" ControlID="txtDateFrom" PropertyName="Text" />
        <asp:ControlParameter Name="dateTo" ControlID="txtDateTo" PropertyName="Text" />            
    </SelectParameters>
    <DeleteParameters>
        <asp:ControlParameter Name="tradeId" ControlId="grdTrades" PropertyName="SelectedValue"  />
    </DeleteParameters> 
</asp:ObjectDataSource>

I want to pass an extra parameter called symbols which is a DataTable . 我想传递一个名为symbols的额外参数,它是一个DataTable I populate the DataTable with this code: 我使用以下代码填充DataTable

DataTable symbols = GetSelectedItems("symbol", listSymbols);

GetSelectedItems looks like this: GetSelectedItems看起来像这样:

private DataTable GetSelectedItems(string column, ListBox _listbox)
{
    DataTable items = new DataTable();
    items.Columns.Add(column, System.Type.GetType("System.String"));

    foreach (ListItem item in _listbox.Items)
    {
        if (item.Selected)
        {
            DataRow dr = items.NewRow();
            dr[column] = item.Value;
            items.Rows.Add(dr);
        }
    }
    return items;
} 

I did try and bind the data myself and removing the ObjectDataSource entirely but then the sorting and paging events weren't handled. 我尝试自己绑定数据并完全删除ObjectDataSource但后来没有处理排序和分页事件。 How would you solve this little issue? 你会如何解决这个小问题?

Thanks! 谢谢!

You can use xml type (and a simple string SelectParameter) instead of DataTable: 您可以使用xml类型(和简单的字符串SelectParameter)代替DataTable:

  1. Page_Load: Serialize selected items of listbox into xml Page_Load:将列表框的选定项目序列化为xml
    and assign his text into the SelectParameter 并将他的文本分配给SelectParameter
  2. GetTrades: Deserialize xml from the SelectParameter into a List<> local variable GetTrades:将SelectParameter中的xml反序列化为List <>局部变量
    XElement x = new XElement("root",
        from i in _listbox.Items.OfType<ListItem>()
        where i.Selected
        select new XElement("row", i.Value));
    string s = x.ToString();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM