我以前用VB做过,我想C#方法也应该一样。就是生成一个Button对象(也可以先在表单中加入一个button按钮,然后设置其可见状态visible为false,使用的时候再让其可见),然后设置该Button的起始x,y坐标等于DataGrid的cell的起始x,y.Button的高度和宽度也设为cell的高度和宽度。如此就可以了!看上去cell变成了buttons!试试吧!
解决方案 »
- 菜鸟问:存储过程的问题。
- 请问怎么判断一个文件流是否是空流。
- 如何用C#实现用sqlldr将文本文件导入数据库阿
- bindingSource的ListChanged未触发
- 如何对DataTable中的数据进行筛选???
- 又是索引超出!急啊
- 关于datagrid控件的问题!!求救!!
- 有谁按照C#企业级样板Duwamish做过自己的分布式应用程序吗?
- 紧急求助:下面的代码运行不通
- 新创建的类在使用完以后需要把他们Dispose掉吗?比如我创建了一个DataTabel类,用完了需要Dispose吗?
- delphi 中作的控件,变量类型为olevariant,在C#中怎么进行调用?
- 根据控件名称来找到这个控件?
bt.Visible=false;在DataGrid的MouseDown事件里:
bt.Visible=true;
DataGrid.Controls.Add(bt);
bt.BringtoFront();
然后还要一些附属条件:
bt的起始x,y坐标等于目标Cell的起始x,y.Button的高度和宽度也设为Cell的高度和宽度。
是想在你鼠标点下的时候,相应的按钮出现,如果楼主一直要该BUTTON出现
那就在窗体的Load事件里全部添加完毕就是了!
2.this.TextBox.Controls.Add(new Button())
private void Form1_Load(object sender, System.EventArgs e)
{
this.sqlDataAdapter1.Fill(this.dataSet11);
button1 = new Button();
button1.Hide();
this.dataGrid1.Controls.Add(button1);
} private void dataGrid1_CurrentCellChanged(object sender, System.EventArgs e)
{
if(dataGrid1.CurrentCell.ColumnNumber ==1)
{
button1.Show();
button1.BringToFront();
button1.Location=dataGrid1.GetCellBounds(dataGrid1.CurrentCell.RowNumber,dataGrid1.CurrentCell.ColumnNumber).Location;
button1.Width=dataGrid1.GetCellBounds(dataGrid1.CurrentCell.RowNumber,dataGrid1.CurrentCell.ColumnNumber).Width;
button1.Height=dataGrid1.GetCellBounds(dataGrid1.CurrentCell.RowNumber,dataGrid1.CurrentCell.ColumnNumber).Height;
} }
}
}
参见http://www.csharphelp.com/archives/archive151.html
这个例子是加的combobox但原理相同,你看看!
Inherits DataGridTextBoxColumn
Public ColumnButton As Button
Public IsShowButtonOnNewRow As Boolean '仅新行时显示按钮
Event ButtonShowing(ByVal cmd As Button, ByVal ColMapName As String, ByVal rowNum As Integer, ByRef IsShow As Boolean) Shared Sub New()
'Warning: Implementation not found
End Sub
Public Sub New()
MyBase.New() Me.ColumnButton = New Button()
Me.ColumnButton.Text = "…"
AddHandler Me.TextBox.VisibleChanged, AddressOf textbox_VisibleChanged
End Sub Protected Overloads Overrides Sub Edit(ByVal source As CurrencyManager, ByVal rowNum As Integer, ByVal bounds As Rectangle, ByVal readOnly1 As Boolean, ByVal instantText As String, ByVal cellIsVisible As Boolean)
MyBase.Edit(source, rowNum, bounds, readOnly1, instantText, cellIsVisible)
If Not IsShowButtonOnNewRow AndAlso (Me.ReadOnly OrElse Me.DataGridTableStyle.ReadOnly OrElse Me.DataGridTableStyle.DataGrid.ReadOnly) Then
ColumnButton.Visible = False
Return
End If '客户程序可控告制显示按钮否
Dim IsShow As Boolean = True
RaiseEvent ButtonShowing(ColumnButton, Me.MappingName, rowNum, IsShow)
If IsShow = False Then
ColumnButton.Visible = False
Return
End If If Me.IsShowButtonOnNewRow Then '仅新行显示按钮
If TypeOf source.Current Is DataRowView Then
Dim row As DataRowView = CType(source.Current, DataRowView)
If row.Row.RowState <> DataRowState.Detached Then
ColumnButton.Visible = False
Return
End If
End If
End If If Me.TextBox.Visible Then
ColumnButton.Parent = Me.TextBox.Parent
ColumnButton.Size = New Size(Me.TextBox.Height + 5, Me.TextBox.Height + 2)
ColumnButton.Location = New Point(Me.TextBox.Location.X + Me.TextBox.Width - _
Me.ColumnButton.Width - 1, TextBox.Location.Y - 2) ColumnButton.Visible = True
ColumnButton.BringToFront()
Else
Me.ColumnButton.Visible = False
End If
End Sub
Protected Overloads Overrides Function Commit(ByVal dataSource As CurrencyManager, ByVal rowNum As Integer) As Boolean
If ColumnButton.Visible Then ColumnButton.Visible = False
Return MyBase.Commit(dataSource, rowNum)
End Function
Private Sub textbox_VisibleChanged(ByVal sender As Object, ByVal e As EventArgs)
If Me.TextBox.Visible = False Then Me.ColumnButton.Visible = False
End Sub
End Class