我有一个数据视图,其中interresting列是length,height,color1和color2,其中color1和color2可以是黄色,红色,蓝色,黑色,白色或绿色中的任何一种.什么是应用过滤器的最佳方法,我获得具有一定长度和高度但只有红色,蓝色和绿色的行?
当可能的颜色增长时,下面的过滤器感觉有点'难看':
"length > 10 AND height > 10 AND (color1 = 'red' OR color1 = 'blue' OR color1 = 'green') AND (color2 = 'red' OR color2 = 'blue' OR color2 = 'green')"
或者这是唯一/最简单的方式?
我有以下代码,它确实有效:
var dataSource = (from p in dv.ToTable().AsEnumerable() where filter(p) select p).AsDataView();
filter是一个Func<DataRow, bool>
dv被一个DataView
dataSource被用作一个DataSource用于DataGrid.
总之,这令我有点难看,我打电话ToTable,AsEnumerable和AsDataView,所以我想知道是否有降低呼叫的数量的方法.
这是我能做到的那么简单吗?
编辑: DataGrid有分页,我使用dataSource来确定条目总数.我并不特别担心这个问题的效率; dv只有几千个项目,表格在内存中维护.
我在页面上有一个Asp.net gridview,当点击一个按钮区域(而不是选择)时,它会打开一个弹出窗体(我的弹出窗口不是asp),其中包含可编辑DetailsView中显示的gridview行的详细信息.(这种方法已经被使用,因为网格包含20个宽的列,并且更容易在detailsView格式中编辑/更新)DetailsView采用任何修改并将它们写回到表中,很好,但是底层的Gridview永远不会在视觉上更新,除非当然页面完全重新加载(我试图使用Windows.reload函数,但我得到恼人的winddows试图重新打开等错误,所以这是没用的).我试图找到让gridview刷新数据的最佳方法.我已经通过Me.ClientScript.RegisterStartupScript(Me.GetType()eyc放置了一个警告框,当详细信息视图的'更新步骤'触发时,它会进行通信,因此我可以插入gridview.ReBind(),但因为详细信息视图是在更新面板,例如,Protected Sub DetailsView2_ItemUpdated(ByVal sender As Object,ByVal e As System.Web.UI.WebControls.DetailsViewUpdatedEventArgs)处理DetailsView2.ItemUpdated函数,以及roqwupdatind等一个,不会出现.(他们当然必须这样做,否则表格不会更新.我的问题是如何与面板中包含详细信息视图的更新事件进行通信,这样我就可以在主网格视图上进行重新绑定.任何想法都会受到赞赏.谢谢您
我正在尝试使用DataView RowFilter过滤数据视图.我想根据在一列上检查的两个日期值过滤掉数据:
Dim dtFuture As Date = DateAdd(DateInterval.Month, 6, Today)
dv.RowFilter = "ValidUntil >" & dtFuture.ToString & "AND ValidUntil > " & Today.ToString
Run Code Online (Sandbox Code Playgroud)
我收到了错误Syntax error: Missing operand after '00' operator..不确定我是否以正确的方式做到这一点.
我在这里有关于ExtJS的DataView示例的几个问题:
http://dev.sencha.com/deploy/ext-4.0.0/examples/view/data-view.html
以下是我的问题:
我有一个自定义组件扩展面板,并做一些布局和东西,以适应我的应用程序.我想使用数据视图在垂直列表视图中呈现此组件的许多实例,就像这个例子一样.我正在与MVC合作并拥有一个模型和商店.
该示例侦听视图中的selectionchange事件.由于我遵循ExtJS MVC模式,我希望在控制器中有一个侦听器.但是,我无法做到这一点.我尝试过这样的事情(假设动作:'picturesListView'用于示例中的Ext.view.View):
this.control({
'picturesListView': {
selectionchange: function() { console.log('selectionchange'); }
}
});
Run Code Online (Sandbox Code Playgroud)但这不起作用.
根据要求发布类代码:
Ext.create('Ext.Panel', {
id: 'images-view',
frame: true,
collapsible: true,
width: 535,
renderTo: 'dataview-example',
title: 'Simple DataView (0 items selected)',
items: Ext.create('Ext.view.View', {
store: store,
tpl: [
'<tpl for=".">',
'<div class="thumb-wrap" id="{name}">',
'<div class="thumb"><img src="{url}" title="{name}"></div>',
'<span class="x-editable">{shortName}</span></div>',
'</tpl>',
'<div class="x-clear"></div>'
],
multiSelect: true,
height: 310,
trackOver: true,
overItemCls: 'x-item-over',
itemSelector: 'div.thumb-wrap',
emptyText: 'No images to display',
alias: 'view.picturesListView',
plugins: [
Ext.create('Ext.ux.DataView.DragSelector', {}),
Ext.create('Ext.ux.DataView.LabelEditor', …Run Code Online (Sandbox Code Playgroud) 我有一个DataTable dt,其中有1200条记录.以下是代码:
DataTable dt = new DataTable();
dt = GetAccCode(c);
Run Code Online (Sandbox Code Playgroud)
现在,使用DataView我想根据1列过滤dt的记录.以下是代码:
EDITED
DataView dv = new DataView(dt);
dv.RowFilter = "AccountDescription LIKE '" + e.Text + "' " ;
dv.RowFilter = "Isnull(AccountDescription,'NULL') <> 'NULL'";
//dv.RowStateFilter = DataViewRowState.ModifiedCurrent;
if (dv.Count > 0)
{
dt = dv.ToTable();
}
Run Code Online (Sandbox Code Playgroud)
完整代码:
C#CODE:
private const int ItemsPerRequest = 50;
private static string GetStatusMessage(int offset, int total)
{
if (total <= 0)
return "No matches";
return String.Format("Items <b>1</b>-<b>{0}</b> out of <b>{1}</b>", offset, total);
} …Run Code Online (Sandbox Code Playgroud)