【问题标题】:Trouble with ASP.NET data source parametersASP.NET 数据源参数的问题
【发布时间】:2010-12-15 10:42:28
【问题描述】:

我有一个GridView,我想向数据源添加更多参数。其中一个参数称为symbols,是DataTable,我不知道如何添加它。这是我的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>

这是我当前的数据源。

<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>

我想传递一个名为symbols 的额外参数,它是DataTable。我用这段代码填充DataTable

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

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;
} 

我确实尝试自己绑定数据并完全删除ObjectDataSource,但是没有处理排序和分页事件。你会如何解决这个小问题?

谢谢!

【问题讨论】:

    标签: c# asp.net gridview c#-4.0


    【解决方案1】:

    您可以使用 xml 类型(和一个简单的字符串 SelectParameter)来代替 DataTable:

    1. Page_Load:序列化所选项目 列表框到 xml
      并分配 将他的文本放入 SelectParameter
    2. GetTrades:将 SelectParameter 中的 xml 反序列化为 List 局部变量

    【讨论】:

    • 谢谢 - 您能否提供一个在 Page_Load 中使用 XML 填充 SelectParameter 的示例?
    【解决方案2】:
        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();
    

    【讨论】:

    • 谢谢,但如何将其分配为 SelectParameter?
    猜你喜欢
    • 2013-05-23
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多