人工使控件无效
当网格控件元素的外观或显示设置被改变时,网格控件自动重绘它们。 例如,在外观设置被改变或汇总值被更新之后,脚注面板被自动重绘。 但是,在某些情况下,可能需要实现自定义控制行为 —— 在视图的元素内显示自定义信息,或定制控件的外观。 考虑下列示例:
- 需要在视图脚注内显示已选中行的数目。 要执行此任务,则应该接管 GridView.CustomDrawFooter 事件。 但是要注意,在选中行的数目发生变动之后,脚注不会被自动重绘。 因此应该接管 ColumnView.SelectionChanged 事件来使视图脚注无效。
- 可以使用 GridView.RowCellStyle 事件来指定数据单元格的外观。 事件处理程序的行为依赖于其他控件的状态 (复选框的状态,或当前在列表框中的选中项)。 在这种情况下,每当外部控件的状态被改变时,就需要强行重绘数据单元格。 在这种情况下,应该调用 BaseView.LayoutChanged 方法。
要人工使控件无效,则调用适当的使控件无效的方法。 所有这些方法都把相应的区域添加到控件的更新区域中,在下一次绘制操作期间,更新区域将被重绘。 要强行同步绘制,则应该在调用使控件无效的方法之后,调用 GridControl.Update 方法。
要使整个视图无效,则可以使用 BaseView.Invalidate 方法。 BaseView.InvalidateRect 方法允许重绘特定的视图区域。 但是,在大多数情况下,只需要更新特定的网格元素 (而不是整个视图)。 要达到此目的,可以调用下表中列出的方法之一:
下面的示例代码演示了如何自定义绘制视图脚注,来让它显示当前已选中行的数目。 为了达到此目的,接管了 GridView.CustomDrawFooter 事件。 但是要注意,在选中行的数目发生变动之后,脚注不会被自动重绘。 应该接管 ColumnView.SelectionChanged 事件来调用 GridView.InvalidateFooter 方法。 这样使视图的脚注无效。
C# | 复制代码 |
---|---|
using DevExpress.XtraGrid.Views.Base; using DevExpress.Data; private void gridView1_CustomDrawFooter(object sender, RowObjectCustomDrawEventArgs e) { e.Graphics.FillRectangle(new SolidBrush(Color.Black), e.Bounds); string footerText = "Selected Rows: " + gridView1.SelectedRowsCount.ToString(); StringFormat outStringFormat = new StringFormat(); outStringFormat.Alignment = StringAlignment.Near; outStringFormat.LineAlignment = StringAlignment.Center; e.Graphics.DrawString(footerText, new Font("Arial", 14, FontStyle.Bold), new SolidBrush(Color.White), e.Bounds, outStringFormat); e.Handled = true; } private void gridView1_SelectionChanged(object sender, SelectionChangedEventArgs e) { gridView1.InvalidateFooter(); } |
Visual Basic | 复制代码 |
---|---|
Imports DevExpress.XtraGrid.Views.Base Imports DevExpress.Data Private Sub GridView1_CustomDrawFooter(ByVal sender As Object, _ ByVal e As RowObjectCustomDrawEventArgs) Handles GridView1.CustomDrawFooter e.Graphics.FillRectangle(New SolidBrush(Color.Black), e.Bounds) Dim footerText As String = "Selected Rows: " + GridView1.SelectedRowsCount.ToString() Dim outStringFormat As StringFormat = New StringFormat() outStringFormat.Alignment = StringAlignment.Near outStringFormat.LineAlignment = StringAlignment.Center e.Graphics.DrawString(footerText, New Font("Arial", 14, FontStyle.Bold), _ New SolidBrush(Color.White), _ New RectangleF(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height), outStringFormat) e.Handled = True End Sub Private Sub GridView1_SelectionChanged(ByVal sender As Object, _ ByVal e As SelectionChangedEventArgs) Handles GridView1.SelectionChanged GridView1.InvalidateFooter() End Sub |
下面的插图展示了运行结果。