- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 UltraGrid,其中有很多列,其中 2 列是 DateTime 样式。现在,当我使用该列的过滤器时,它会将所有 DateTime 值显示为下拉列表中的文本。但我需要它作为日历,以便使过滤器更容易。单击过滤器时仅显示一个日历就足够了。
我已经尝试了一些代码,但它不起作用。
//代码:
Private Sub grdResult_BeforeRowFilterDropDown(ByVal sender As Object, ByVal e As Infragistics.Win.UltraWinGrid.BeforeRowFilterDropDownEventArgs) Handles grdResult.BeforeRowFilterDropDown
e.Cancel = True
UltraCalendarCombo1.Visible = True
UltraCalendarCombo1.Location = New Point(grdResult.Rows.FilterRow.Cells(e.Column).GetUIElement().Rect.Location.X, grdResult.Rows.FilterRow.Cells(e.Column).GetUIElement().Rect.Location.Y - 2)
UltraCalendarCombo1.Size = New System.Drawing.Size(grdResult.Rows.FilterRow.Cells(e.Column).GetUIElement().Rect.Size.Width, grdResult.Rows.FilterRow.Cells(e.Column).GetUIElement().Rect.Size.Height)
' UltraCalendarCombo1.DroppedDown = True
End Sub
单击过滤器下拉列表时将触发上述事件。
private sub applyCustomeViewSettings(byval gridFormat as GridFormat)
....
...
For Each ColumnFormat In gridFormat.ColumnFormats
For Each column In Me.grdResult.DisplayLayout.Bands(0).Columns
If column.Key.ToUpper = ColumnFormat.ColumnKey.ToUpper Then
If column.Key.ToUpper = "PCSSTDT" Then
column.Header.Caption = IIf(ColumnFormat.Caption = "", ColumnFormat.ColumnKey, ColumnFormat.Caption)
column.Hidden = ColumnFormat.Hidden
'column.AllowRowFiltering = IIf(ColumnFormat.AllowRowFiltering = False, ColumnFormat.AllowRowFiltering, DefaultableBoolean.True) 'CType(ColumnFormat.AllowRowFiltering, DefaultableBoolean)
column.Width = ColumnFormat.Width
column.Header.VisiblePosition = ColumnFormat.VisiblePosition
column.Format = ColumnFormat.Format
column.SortIndicator = ColumnFormat.SortIndicator
' column.Style = ColumnStyle.Date
'column.EditorComponent = UltraCalendarCombo1
column.FilterOperandStyle = FilterOperandStyle.Default
Else
column.Header.Caption = IIf(ColumnFormat.Caption = "", ColumnFormat.ColumnKey, ColumnFormat.Caption)
column.Hidden = ColumnFormat.Hidden
column.AllowRowFiltering = IIf(ColumnFormat.AllowRowFiltering = False, ColumnFormat.AllowRowFiltering, DefaultableBoolean.True) 'CType(ColumnFormat.AllowRowFiltering, DefaultableBoolean)
column.Width = ColumnFormat.Width
column.Header.VisiblePosition = ColumnFormat.VisiblePosition
column.Format = ColumnFormat.Format
column.SortIndicator = ColumnFormat.SortIndicator
column.Style = ColumnFormat.Style
End If
End If
Next
....
...
End Sub
上述方法使网格发生变化(应用设置)以将过滤器显示为日历。但这不起作用并向我显示相同的正常网格。
我怎样才能做到这一点?
最佳答案
当您按下图标以过滤 UltraWinGrid 中的 DateTime 列时,我设法显示了 MonthCalendar
。
当显示 MonthCalendar
时,您可以使用此标准 WinForm 控件提供的熟悉界面选择特定日期。选择日期后,您可以使用该值以编程方式将过滤条件应用于 UltraWinGrid 列。
要达到此结果,您首先需要添加对 Infragistics4.Win.SupportsDialog.v11.2 程序集的引用,您可以在其中找到 UltraGridFilterUIProvider 类
现在,在您需要显示过滤的表单中,添加此代码:(这只是一个示例,因为我没有您的数据源,因此我有一个只有一个日期时间列的预建数据源)
Imports Infragistics.Win.UltraWinGrid
Imports Infragistics.Win.SupportDialogs.FilterUIProvider
Public Class Form1
' This is the key object that let us customize '
' the Filter for the UltraWinGrid'
Dim _filterUIProvider as UltraGridFilterUIProvider
' In the InitializeLayout event we substitute the normal
' filter handler with the custom filter'
Private Sub UltraGrid1_InitializeLayout(sender As Object, e As Infragistics.Win.UltraWinGrid.InitializeLayoutEventArgs) Handles UltraGrid1.InitializeLayout
e.Layout.Override.AllowRowFiltering = Infragistics.Win.DefaultableBoolean.True
_filterUIProvider = New UltraGridFilterUIProvider()
' Comment out the following line to test the default
' **Excel Filter Style Interface** '
AddHandler _filterUIProvider.BeforeMenuPopulate, AddressOf _filterUIProvider_BeforeMenuPopulate
e.Layout.Override.FilterUIProvider = _filterUIProvider
End Sub
' Before the UltraGridFilterUIProvider shows its standard form interface
' we start a custom form used to apply our filtering logic '
' and block the display of the UltraGridFilterUIProvider interface '
Private Sub _filterUIProvider_BeforeMenuPopulate(sender As Object, e As Infragistics.Win.SupportDialogs.FilterUIProvider.BeforeMenuPopulateEventArgs)
' A custom form with the MonthCalendar and 3 buttons '
' to handle the filter logic '
Using fDate = new FormDate()
' Open our custom form with the monthcalendar
if (DialogResult.OK = fDate.ShowDialog())
' We need a nullable date to allow the removing of the filter'
Dim dtFilter As DateTime? = fDate.SelectedDate
if (dtFilter.HasValue)
' Apply programmatically a filtercondition to the column
' In this case I have only one column. so I use the index 0
' in your case this should change to reflect your column index
Dim fc = new FilterCondition(FilterComparisionOperator.Equals, dtFilter.Value)
ultraGrid1.DisplayLayout.Bands(0).ColumnFilters(0).FilterConditions.Add(fc)
Else
ultraGrid1.DisplayLayout.Bands(0).ColumnFilters.ClearAllFilters()
End If
End If
End Using
e.Handled = true ' Stop the standard interface'
End Sub
End Class
现在我们只需要一个名为 FormDate 的简单表单,它包含一个 MonthCalendar 和三个按钮(Set、Clear、Cancel),它们返回(Set)一个 Date 来设置过滤器,(Clear)一个 null用于删除先前过滤器的值和用于中止处理的取消按钮
这里是表单的代码,设计很简单
Public Class FormDate
Public Property SelectedDate As DateTime?
Private Sub FormDate_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.SelectedDate = Nothing
End Sub
Private Sub cmdSet_Click(sender As Object, e As EventArgs) Handles cmdSet.Click
'This button has DialogResult=OK'
Me.SelectedDate = monthCalendar1.SelectionStart
End Sub
Private Sub cmdClear_Click(sender As Object, e As EventArgs) Handles cmdClear.Click
'This button has DialogResult=OK'
Me.SelectedDate = Nothing
End Sub
End Class
这可以解决您的问题,但是,我发现 UltraGridFilterUIProvider 中似乎存在错误。当我调用 e.Handled=True 时,我的预期结果是过滤器不显示任何内容,而是仍然出现一个小窗口,我必须按 Escape 键将其隐藏。我还没有找到任何自动隐藏它的方法。
向 Infragistics 团队发出信号似乎是个问题。
我建议您也测试 UltraGridFilterUIProvider 自动提供的 Excel 样式过滤器接口(interface)。这个界面有很多选项,比标准的 UI 过滤器更可取。要测试此接口(interface),您应该只注释掉上面的 AddHandler 行
编辑 根据@Alhalama 的评论,我尝试使用 BeforeRowFilterDropDown 事件,结果更好(现在很完美)。所以我用 AddHandler 注释掉了这一行,删除了 BeforeMenuPopulate 的代码并添加了 BeforeRowFilterDropDown 的代码
Private Sub UltraGrid1_BeforeRowFilterDropDown(sender As Object, e As BeforeRowFilterDropDownEventArgs) Handles UltraGrid1.BeforeRowFilterDropDown
If e.Column.Key = "DateRequest" Then
Using fDate = New FormDate()
If DialogResult.OK = fDate.ShowDialog() Then
Dim dtFilter As DateTime? = fDate.SelectedDate
If (dtFilter.HasValue) Then
Dim fc As FilterCondition = New FilterCondition(FilterComparisionOperator.Equals, dtFilter.Value)
UltraGrid1.DisplayLayout.Bands(0).ColumnFilters(0).FilterConditions.Add(fc)
Else
UltraGrid1.DisplayLayout.Bands(0).ColumnFilters.ClearAllFilters()
End If
End If
End Using
e.Cancel = True
End If
End Sub
现在,当我尝试打开名为 DateRequest 的列的过滤器时,我立即打开 FormDate,最后我将 BeforeRowFilterDropDownEventArgs 的 Cancel 属性设置为 true 以避免进一步处理过滤器对话。这似乎是完美的……这要归功于 Alhalama 先生。如果您愿意,我认为您应该发布自己的答案,因为您的建议确实有所作为。
关于vb.net - 在 Ultragrid 列过滤器中显示日历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17943824/
我希望根据行中的 bool 同步属性禁用 Ultragrid 中的某些行。我想过两种不同的解决方案,但都没有成功。 1) 将 Sync 属性数据绑定(bind)到行的 Activation 属性。这可
正在处理由其他人编写的代码。以下是代码的重要部分: UltraGridColumn col = columns.Add("FolderImage", "Status"); col.Header.F
我正在使用 linq 拉回一个对象(即客户),该对象可能具有其他对象(customer.orders)的集合。如果我可以将此客户列表传递给 ultragrid,并在数据绑定(bind)上显示客户和他们
在最后一列上按右箭头键时,有什么方法可以强制 Infragistics Ultragrid 不移动到行下方? 例如,在表格下方,在具有“C”值(COL_1,第 1 行)的单元格中 - 如果我按向右箭头
我是 Infragistics 的新手。 在我的 winforms 应用程序中,我使用 Ultrawingrid 来显示数据库中的数据。 如何将复选框列显示为网格中的第一列? 此外,我需要捕获选中/取
如果金额单元格中的值已更新,我将尝试更改兄弟单元格(天)的值。问题是我不确定如何访问日单元格。这是我目前所拥有的。 private void UltraGridEdit_AfterCellUpdat
我在 V15.1 中使用 Infragistics UltraGrid,并且在使用“InitializeRow”行事件对网格中的每一行进行着色和格式化时,初始化网格所花费的时间存在问题。我想在发生这种
我有一个包含 100,000 条记录的表,我有一个方法(使用 Entity Framework )检索 10 条记录,我给它跳过多少条记录以获取接下来的 10 条记录。 List GetRecords
我在 Windows 应用程序中使用 ultragrid 来显示数据库表的记录,方法是将其 DataSource 属性设置为从该表返回的数据表。 行数可以是100000行左右。 现在我有两个问题: 1
我的 RTSP 服务器有问题 ultragrid . 我下载 Ultragrid-master,git 源代码,我运行 autogen.sh接下来我运行 ./configure --enable-rt
我正在尝试使某些单元格在特定条件(标志)下只读。但我在设置确切条件时遇到问题。我有一个非空位列并试图为其值设置条件。这是我的代码: private void grdOtherItemsInfo_Ini
我有一个 UltraGrid,它绑定(bind)到一个具有两列(键、值)的 DataTable。我已将 10 行添加到数据表中,现在第 11 行的值列中有一个 URL。 URL 值添加得很好,但它不像
我有一个包含很多行的超网格,新行添加到末尾,我希望在添加新行时选择该行并且网格也应该滚动到底部。 我打算试试 ActiveRow,但它说它没有 setter private void ultraBut
我有一个带有 Ultragrid 的用户控件。在我添加 ValueList 的特定形式中。值列表不会显示我感兴趣的特定列。如果我在另一列中编码,而不是通过更改列的索引值,我将在该列中获得值列表。 代码
我正在向我的用户展示来自数据库的 UltraGrid 中的项目列表。现在,我有一个需求,但我找不到任何有用的东西或任何清晰的文档,也没有可供我学习的教程。 我需要扩展这个网格的功能,设置一个 (+)
假设我们有一个 UltraGrid。如何以编程方式首先按 A 列、B 列和 C 列对其进行排序。 谢谢! 最佳答案 文档在这里: http://help.infragistics.com/Help/D
我对 Infragistics 的 UltraGrid 控件有疑问。我创建了一个包含一些值的 ultracombobox: UltraCombo ultraComboPaneel = new Ult
我在 WinForms 应用程序中使用 Infragistics UltraGrid。 Infragistics UltraGrid 中复选框的“检查更改”会引发哪个事件? 最佳答案 使用 CellC
我在 Windows 窗体应用程序中使用 Infragistics UltraGrid。 我需要一个在单元格值更改时引发的事件。 我尝试了很多事件,例如 AfterCellActivate、After
我有一个 UltraGrid,其中有很多列,其中 2 列是 DateTime 样式。现在,当我使用该列的过滤器时,它会将所有 DateTime 值显示为下拉列表中的文本。但我需要它作为日历,以便使过滤
我是一名优秀的程序员,十分优秀!