使用C1ReportDesigner控件 > 步骤九:添加代码以创建字段 |
这个简单的设计器接近完成;目前唯一缺少的部分是用来在报表中创建新字段的代码。
查看我们在工具栏事件处理程序写的代码,您会发现它设置了设计器的CreateFieldInfo属性,表示将等待处理设计器的CreateField事件。
添加以下代码,以便在报表中创建新的字段:
Visual Basic
Visual Basic |
拷贝代码
|
---|---|
'在工具栏按钮上处理单击事件 Private Sub _tb_ButtonClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) Handles _tb.ButtonClick ' 添加字段 ' (仅设置创建信息,并等待设计器的CreateField事件) If e.Button.Equals(_btnAddField) Then _c1rd.CreateFieldInfo = e.Button If e.Button.Equals(_btnAddLabel) Then _c1rd.CreateFieldInfo = e.Button End Sub |
C#
C# |
拷贝代码
|
---|---|
//在工具栏按钮上处理单击事件 private void _tb_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e) { // 添加字段 // (仅设置创建信息,并等待设计器的CreateField事件) if (e.Button == _btnAddField) _c1rd.CreateFieldInfo = e.Button; if (e.Button == _btnAddLabel) _c1rd.CreateFieldInfo = e.Button; } |
CreateFieldInfo属性可以设置为任意的非空对象,以通知设计器您希望创建一个新的字段。设计器不知道您想要什么类型的字段或你想如何初始化它,所以它跟踪鼠标,允许用户在一个区域内绘制出字段的边框位置。它接着触发CreateField事件,并传递给您所需要的创建字段的信息。
将下面的代码添加到事件处理函数以处理CreateField事件:
Visual Basic
Visual Basic |
拷贝代码
|
---|---|
Dim _ctr As Integer Private Sub _c1rd_CreateField(ByVal sender As Object, ByVal e As C1.Win.C1ReportDesigner.CreateFieldEventArgs) Handles _c1rd.CreateField ' 保存撤销信息 _c1rd.UndoStack.SaveState() ' 添加label字段 _ctr = _ctr + 1 Dim fieldName As String = String.Format("NewField{0}", _ctr) Dim fieldText As String = fieldName Dim f As Field = e.Section.Fields.Add(fieldName, fieldText, e.FieldBounds) ' 如果这是一个计算字段, ' 改变Text和Calculated属性 If e.CreateFieldInfo.Equals(_btnAddField) Then Dim fieldNames As String() = _c1rd.Report.DataSource.GetDBFieldList(True) If (fieldNames.Length > 0) Then f.Text = fieldNames(0) f.Calculated = True End If End If End Sub |
C#
C# |
拷贝代码
|
---|---|
int _ctr = 0; private void _c1rd_CreateField(object sender, C1.Win.C1ReportDesigner.CreateFieldEventArgs e) { // 保存撤销信息 _c1rd.UndoStack.SaveState(); // 添加label字段 string fieldName = string.Format("NewField{0}", ++_ctr); string fieldText = fieldName; Field f = e.Section.Fields.Add(fieldName, fieldText, e.FieldBounds); // 如果这是一个计算字段, // 改变Text和Calculated属性 if (e.CreateFieldInfo == _btnAddField) { string[] fieldNames = _c1rd.Report.DataSource.GetDBFieldList(true); if (fieldNames.Length > 0) { f.Text = fieldNames[0]; f.Calculated = true; } } } |
注意代码如何在开始位置调用设计器的 SaveState 方法,因此用户可以撤销创建字段行为。在此之后,字段创建完成,CreateFieldInfo参数用作自定义新的字段,并且使其表现为一个标签或者计算字段。
总结简单设计器程序:一个对于如何操作C1ReportDesigner控件的介绍。