...
Visual Basic |
Dim Col As New C1.Win.C1TrueDBGrid.C1DataColumn Dim dc As C1.Win.C1TrueDBGrid.C1DisplayColumn |
To write code in C#
C# | ||
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="23a26fe5-eed1-47c6-b4a7-bdc3378435f6"><ac:plain-text-body><![CDATA[ | C1.Win.C1TrueDBGrid.C1DataColumn Col = new C1.Win.C1TrueDBGrid.C1DataColumn(); C1.Win.C1TrueDBGrid.C1DisplayColumn dc; c1TrueDBGrid1.Columns.Insert(0, Col); Col.Caption = "Unbound"; dc = c1TrueDBGrid1.Splits[0].DisplayColumns["Unbound"]; | ]]></ac:plain-text-body></ac:structured-macro> |
Wiki Markup |
---|
<span style="color: #008000">// 移除网格最左侧的新加入的列。</span> c1TrueDBGrid1.Splits\[0\].DisplayColumns.RemoveAt(C1TrueDBGrid1.Splits\[0\].DisplayColumns.IndexOf(dc)); c1TrueDBGrid1.Splits\[0\].DisplayColumns.Insert(0, dc); dc.Visible = true; c1TrueDBGrid1.Rebind(true); 当网格需要显示非绑定列中的值,它将触发{*}UnboundColumnFetch{*}事件,该事件提供给用户行和列的索引,用以识别所请求的网格中的单元格,事件的{*}Value{*}属性是类型对象,默认值为Null,但可以更改为任何所需的值,并将用于填充指定行和列索引单元格的内容。 *To write code in Visual Basic* |
...
Visual Basic |
Private Sub C1TrueDBGrid1_UnboundColumnFetch(ByVal sender As Object, ByVal e As |
To write code in C#
C# |
private void c1TrueDBGrid1_UnboundColumnFetch(object sender, |
实现多非绑定列
目前,我们的示例仅使用一个单独的非绑定列演示UnboundColumnFetch 事件,但仅使用了一个非绑定列,由于 UnboundColumnFetch触发了每个非绑定列的每一行,只要一个列值某时被设置,每一列就必须确定一个合适的值,第二个UnboundColumnFetch属性Column被用于识别网格中的列,其值是必须的。
To write code in Visual Basic
...
To write code in C#
C# |
// 将用作拷贝。 private void Form1_Load( System.object sender, System.EventArgs e) { dtCopy = this.DataSet11.Tables[0].Copy(); } { switch (e.Column.Caption Caption) { case "Area"; break; case "Perimeter"; break; } |
更新非绑定列
在大多数情况下,非绑定列是只读的,并作为源自网格中其他数据的值,在这些情况下,设置列样式的Locked 属性为True。
若Locked 为False 且更新被允许,用户可以编辑非绑定列的值,当编辑非绑定列值时,行被标记为已更新(在记录选择器列中将显示一个铅笔图标)并且更新序列将照常执行,然而网格并不了解修改后的数据将如何处理,因此不需要数据库字段来保存它,在这种情况下,UnboundColumnUpdated 事件将被触发。
BeforeUpdate 事件将用来取消更新操作,因此,如果非绑定列与其他数据库绑定,则非绑定列的更新将在
BeforeUpdate中执行,如果操作失败,那么事件将被取消,但如果操作成功了,绑定更新将被允许继续,绑定更新也有可能在这时失败,因此非绑定列的数据库关联最好在事务基础上被处理。
如果绑定更新成功了,则AfterUpdate 事件将被触发,并且非绑定列事务应该被确认,如果绑定更新失败,非绑定列事务应将在 .NET的错误捕捉处理中回滚,依赖于更新初始化的状态,如果事务不可用,此时将之前非绑定原始列值存储到更新中,执行其他更新来存储绑定更新失败的这些值。
...
C# |
private void C1TrueDBGrid1_AfterColUpdate(object sender, { int row = this.c1TrueDBGrid1.Row; this.c1TrueDBGrid1[row, "Balance"] = -e.Column.DataColumn.Value; |
注意,当更新这些列时,代码事实上改变了Balance 列中的值,包括绑定的和不可见的值。
...
To write code in Visual Basic
Visual Basic |
Me.C1TrueDBGrid1.SetDataBinding() |
To write code in C#
C# |
this.c1TrueDBGrid1.SetDataBinding(); |
- 使用AddRow或AddRows 方法填充网格。
To write code in Visual Basic
Visual Basic |
Me.C1TrueDBGrid1.AddRow("John;Doe;11/29/1985") |
To write code in C#
C# |
this.c1TrueDBGrid1.AddRow("John;Doe;11/29/1985"); this.c1TrueDBGrid1.AddRow("Jane;Doe;7/12/1980"); int index = this.c1TrueDBGrid1.AddRows(2); for(int i=index; i < 2; i++) |
...
C# |
private void button1_Click(object sender, EventArgs e) { int idx = (int) this.numericUpDown1.Value; DataRow dr = this.c1TrueDBGrid1.NewRow(); dr[0] = "new row"; |
...