【问题标题】:Filtering Data Table as Repeater DataSource (asp. net)将数据表过滤为Repeater DataSource(asp.net)
【发布时间】:2016-10-14 07:42:34
【问题描述】:

我有嵌套的repaters 来对数据进行分组。同一张表中的所有数据,它们都有 QUESTION_GROUP 列。我在父项数据绑定中为子转发器从父转发器传递组名。但我不能将其设置为子中继器数据源。如何从数据表中过滤多个数据以获取转发器数据源?

protected void ParentRepeaterDataBound(object sender, RepeaterItemEventArgs e)
    {
        Repeater rp = (Repeater)e.Item.FindControl("ChildRepeater");            
        rp.DataSource = FixedQuestions.Select("QUESTION_GROUP='" + DataBinder.Eval(e.Item.DataItem, "Q_Group").ToString() + "'");
        rp.DataBind();
    }

Q_Group 来自父中继器。 QUESTION_GROUP 是 fixedquestions(DataTable) 中的一列。

我在问,如何获得按列过滤的数据表的一部分(对于中继器数据源)?

【问题讨论】:

  • 不能设置数据源是什么意思?请解释发生了什么,例外?空中继器?什么是固定问题?没有足够的信息可以帮助您:stackoverflow.com/help/mcve
  • @Esko 抱歉。 FixedQuestion 是包含所有数据的数据表。我想从中获取一些数据,例如“DataTable.Select(Where question_group=Parent Repeater's Data Item)”。我现在有一个错误(对象引用未设置对象的实例)。看起来我的源不适合作为中继器的数据源。
  • 将所有这些附加信息编辑到您的问题中。哪一行抛出异常? rp 为空吗? FixedQuestions 是否为空?仍然没有足够的信息来帮助您,我们无法知道那段代码有什么问题。
  • @Esko 其实我认为这篇文章有足够的信息。对于我要问的。我在问; “如何获得表格的一部分,作为按列过滤的中继器数据源?”或者:“我怎样才能得到表格的一部分,作为一个按列过滤的新数据表?”

标签: c# asp.net


【解决方案1】:

您可以在将表绑定到嵌套的Repeater之前使用Linq对其进行过滤。

rp.DataSource = FixedQuestions.AsEnumerable().Where(x => x.Field<string>("columnName") == "myValue").CopyToDataTable();

只要过滤后还有剩余的行,上面的sn-p就会起作用。否则,您将收到“源不包含 DataRows”错误。 下面的sn-p会在调用CopyToDataTable()之前检查是否有行。

        DataTable dtFiltered = new DataTable();
        var dtFilteredTemp = FixedQuestions.AsEnumerable().Where(X => X.Field<string>("columnName") == "myValue");
        if (dtFilteredTemp.AsDataView().Count > 0)
        {
            dtFiltered = dtFilteredTemp.CopyToDataTable();
        }
        rp.DataSource = dtFiltered;

【讨论】:

  • 我已经尝试过您的第一个片段,但出现“源不包含 DataRows”错误。所以我尝试了第二个,没有错误,但它不能正常工作。 S Ro 调试代码,发现 dtFiltered 有 0 行。我无法理解。 ://
  • 那么您过滤的内容返回了 0 个结果。尝试过滤一个可以返回行的值。
  • 我已经检查过了 :( 我认为我的 FixedQuestion 表可能是空的。我正在使用会话获取它(并且我正在使用您的代码,例如 -> (DataTable)Session["FixedQuest"]) .AsEnumerable().Where......) 我想我应该检查我的会话或更新面板或其他东西。因为您的代码看起来正确且合理。谢谢你现在:)
  • 可能就是这样。您可以先将会话存储为未过滤的数据表,然后检查是否有任何行。如果是这种情况,您可以检查Where 语句(注意字符串在过滤中区分大小写)
  • 我检查了我的会话表。它有正确的行(但是,我看不到其中的数据,但我可以看到正确的列和行。它有数据)。我的专栏名称是“QUESTION_GROUP”,我使用的是大写字母。我必须大吧?
猜你喜欢
  • 1970-01-01
  • 2018-03-04
  • 1970-01-01
  • 1970-01-01
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多