![](/img/trans.png)
[英]How to filter devexpress lookupedit datasource in gridview
[英]How can I filter a gridview when two columns in the datasource match
我有一个 GridView ,其中数据源是从存储过程填充的数据表中设置的。 数据表中有两列我有兴趣根据它们的内容过滤/显示和隐藏。 数据用于不同课程的课程。
数据表/数据源
标识符 | 课程名称 | 基标识符 |
---|---|---|
CBT-0001 | 如何建造橱柜 | CBT-0001 |
CBT-0002 | 切割木材的危险 | CBT-0002 |
TBL-0001 | 如何建立一个表 | TBL-0001 |
TBL-0002 | 切割木材的危险 | CBT-0002 |
在上表中,Lesson TBL-0002 只是 CBT-0002 的别名/指针。
基于一个复选框,我需要显示 Gridview 中的所有内容,并且我只需要显示标识符 = baseIdentifier 的父课程。 因此,在过滤/或隐藏行之后,我的 gridview 将如下所示:
[ ] 显示别名课程
标识符 | 课程名称 | 基标识符 |
---|---|---|
CBT-0001 | 如何建造橱柜 | CBT-0001 |
CBT-0002 | 切割木材的危险 | CBT-0002 |
TBL-0001 | 如何建立一个表 | TBL-0001 |
[X] 显示别名课程
标识符 | 课程名称 | 基标识符 |
---|---|---|
CBT-0001 | 如何建造橱柜 | CBT-0001 |
CBT-0002 | 切割木材的危险 | CBT-0002 |
TBL-0001 | 如何建立一个表 | TBL-0001 |
TBL-0002 | 切割木材的危险 | CBT-0002 |
我的目标是只查询一次,而不是每次选中/取消选中复选框时都必须重新查询。 唯一一次 Identifier 等于 BaseIdentifier 是当它是父课程时(父母是他们自己的别名)。
我的代码:
PathBO pathBO = new PathBO();
LessonBO lessonBO = new LessonBO();
pathBO.GetPath();
DataTable dt = new DataTable();
dt = lessonBO.GetAllAliasLessons();
gvLessons.DataSource = dt;
gvLessons.DataBind();
我的 Gridview:
<asp:GridView ID="gvLessons" runat="server" cssClass="Grid" GridLines="None" AutoGenerateColumns="False" AllowSorting="true">
<AlternatingRowStyle cssClass="GridAltRow" />
<Columns>
<asp:BoundField DataField="Identifier" HeaderText="Identifier" SortExpression="Identifier" />
<asp:BoundField DataField="SectionTitle" HeaderText="SectionTitle" />
<asp:BoundField DataField="VersionNum" HeaderText="VersionNumber" />
<asp:BoundField DataField="AliasList" HeaderText="AliasList" />
<asp:BoundField DataField="BaseIdentifier" HeaderText="BaseIdentifier" Visible="False" />
</Columns>
<EditRowStyle cssClass="GridEditRow" />
<FooterStyle cssClass="GridFooter" />
<HeaderStyle cssClass="GridHeader" />
<PagerStyle cssClass="GridPager" />
<RowStyle cssClass="GridRow" />
<SelectedRowStyle cssClass="GridSelectedRow" />
<SortedAscendingCellStyle cssClass="GridSortAscCell" />
<SortedAscendingHeaderStyle cssClass="GridSortAscHeader" />
<SortedDescendingCellStyle cssClass="GridSortDescCell" />
<SortedDescendingHeaderStyle cssClass="GridSortDescHeader" />
</asp:GridView>
谢谢
第一? 伙计们-这就是您在SO上提问的方式!
不要发布 200 行代码,但要发布我们需要的确切代码行!
好的,读到这里? 好吧,我们的过滤器实际上变成了:
[x] 显示别名课程
If "Identifer" <> "BaseIdentifer" then
Show all lessons
Else
"Identifier" = "BaseIdentifer"
所以,你的代码变成了这样:
DataView dtMyFilterView As new DataView
dtMyFilterView = dt
If ShowAliasLessons.Checked = True Then
dtMyFilterView.RowFilter = ""
Else
dtMyFilterView.RowFilter = "Identifier <> BaseIdentifier"
End If
gvLessons.DataSource = dtMyFilterView
gvLessons.DataBind();
编辑:取决于过滤器 - 如果您只想要非别名,则不清楚。
但你当然可以这样做:
If ShowAliasLessons.Checked = True Then
dtMyFilterView.RowFilter = ""Identifier <> BaseIdentifier""
Else
dtMyFilterView.RowFilter = "Identifier = BaseIdentifier"
End If
因此,无论如何,取决于所有课程,或者只有非别名与别名。 (但是,你明白了,选择是你的)。
现在我在 vb 和 c# 之间修改了代码。 但是在您设置“dt”(数据表)之后,我们会根据该 dt 创建一个 dataView。 使用数据视图,因为它可以轻松排序,当然也可以过滤。 事实上,您可以将“数据视图”保存/推入 session 并简单地检查 [x] 显示别名课程的状态,然后简单地更改过滤器并重新绑定回网格。 (因此,您不需要重新调用填充表的存储过程,而只需在“数据视图”上翻转过滤器。这当然假设您将 dv 保存在视图状态或 session 中。但实际上,如果如果您重新调用存储过程,请获取数据表,然后在该表上设置“dv”过滤器。
所以只需添加一个“新”中间步骤。 在数据表和 gridview 之间使用“数据视图”。 数据视图是为这个问题量身定做的。 您可以过滤、排序或执行任何操作,然后用数据绑定该“数据视图”来代替表格!
因此,将数据视图推入网格中,在您这样做之前,只需设置您需要的过滤器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.