注意是WinForm里的dataGrid控件,不是web下的。如无办法呀。

解决方案 »

  1.   

    当然可以
    不过我忘了,google
      

  2.   

    http://blog.csdn.net/zwxrain/archive/2005/01/19/258998.aspx
    弄懂了,就能自己加button了
      

  3.   

    VS2005 可以
    VS2003 得自己扩展
      

  4.   

    .net2005中Datagridvieew就是一个容器,2003怎样就不知道了
      

  5.   

    Public Class mybuttondatagridtablestyle1 
        Inherits System.Windows.Forms.DataGridTextBoxColumn #Region " Windows 窗体设计器生成的代码 "     Public Sub New() 
            MyBase.New()         '该调用是 Windows 窗体设计器所必需的。 
            InitializeComponent()         '在 InitializeComponent() 调用之后添加任何初始化     End Sub     'UserControl 重写 dispose 以清理组件列表。 
        Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) 
            If disposing Then 
                If Not (components Is Nothing) Then 
                    components.Dispose() 
                End If 
            End If 
            MyBase.Dispose(disposing) 
        End Sub     'Windows 窗体设计器所必需的 
        Private components As System.ComponentModel.IContainer     '注意:以下过程是 Windows 窗体设计器所必需的 
        '可以使用 Windows 窗体设计器修改此过程。 
        '不要使用代码编辑器修改它。 
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() 
            components = New System.ComponentModel.Container() 
        End Sub #End Region 
        Public Delegate Sub DataGridCellButtonClickEventHandler(ByVal sender As Object, ByVal e As DataGridCellButtonClickEventArgs) 
        Public Event CellButtonClicked As DataGridCellButtonClickEventHandler     Private m_Face As Bitmap 
        Private m_FacePressed As Bitmap 
        Private m_columnNum As Integer 
        Private m_Row As Integer 
        Public Sub New(ByVal colNum As Integer) 
            m_columnNum = colNum 
            m_Row = -1         Try 
                Dim strm As System.IO.Stream = Me.GetType().Assembly.GetManifestResourceStream("btnface.bmp") 
                m_Face = New Bitmap(strm) 
                strm = Me.GetType().Assembly.GetManifestResourceStream("btnpressed.bmp") 
                m_FacePressed = New Bitmap(strm) 
            Catch 
            End Try 
        End Sub     Protected Overloads Overrides Sub Edit(ByVal [source] As System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer, ByVal bounds As System.Drawing.Rectangle, ByVal [readOnly] As Boolean, ByVal instantText As String, ByVal cellIsVisible As Boolean)     End Sub        Public Sub HandleMouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) 
            Dim dg As DataGrid = Me.DataGridTableStyle.DataGrid 
            Dim hti As DataGrid.HitTestInfo = dg.HitTest(New Point(e.X, e.Y)) 
            Dim isClickInCell As Boolean = hti.Column = Me.m_columnNum         m_Row = -1         Dim rect As New Rectangle(0, 0, 0, 0)         If isClickInCell Then 
                rect = dg.GetCellBounds(hti.Row, hti.Column) 
                isClickInCell = e.X > rect.Right - Me.m_Face.Width 
            End If 
            If isClickInCell Then 
                Dim g As Graphics = Graphics.FromHwnd(dg.Handle) 
                g.DrawImage(Me.m_Face, rect.Right - Me.m_Face.Width, rect.Y) 
                g.Dispose()             RaiseEvent CellButtonClicked(Me, New DataGridCellButtonClickEventArgs(hti.Row, hti.Column))         End If 
        End Sub     Public Sub HandleMouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) 
            Dim dg As DataGrid = Me.DataGridTableStyle.DataGrid 
            Dim hti As DataGrid.HitTestInfo = dg.HitTest(New Point(e.X, e.Y)) 
            Dim isClickInCell As Boolean = hti.Column = Me.m_columnNum 
            Dim rect As New Rectangle(0, 0, 0, 0) 
            If isClickInCell Then 
                rect = dg.GetCellBounds(hti.Row, hti.Column) 
                isClickInCell = e.X > rect.Right - Me.m_Face.Width 
            End If         If isClickInCell Then             Dim g As Graphics = Graphics.FromHwnd(dg.Handle) 
                g.DrawImage(Me.m_FacePressed, rect.Right - Me.m_FacePressed.Width, rect.Y) 
                g.Dispose() 
                m_Row = hti.Row 
            End If 
        End Sub     '重绘 
        Protected Overloads Overrides Sub Paint(ByVal g As System.Drawing.Graphics, ByVal bounds As System.Drawing.Rectangle, ByVal [source] As System.Windows.Forms.CurrencyManager, ByVal rowNum As Integer, ByVal backBrush As System.Drawing.Brush, ByVal foreBrush As System.Drawing.Brush, ByVal alignToRight As Boolean)         Dim parent As DataGrid = Me.DataGridTableStyle.DataGrid 
            '如果该行是选中行 或者 当前单元格的行号=点击行的行号并且当前单元格的列号等于NEW的列号参数 
            Dim current As Boolean = parent.IsSelected(rowNum) Or (parent.CurrentRowIndex = rowNum And parent.CurrentCell.ColumnNumber = Me.m_columnNum)         Dim BackColor As Color 
            If current Then BackColor = parent.SelectionBackColor Else BackColor = parent.BackColor 
            Dim ForeColor As Color 
            If current Then ForeColor = parent.SelectionForeColor Else ForeColor = parent.ForeColor         '请空单元格 
            g.FillRectangle(New SolidBrush(BackColor), bounds)         ' 绘制值 
            Dim s As String = Me.GetColumnValueAtRow([source], rowNum).ToString() 'parent[rowNum, 0].ToString() + ((parent[rowNum, 1].ToString())+ "  ").Substring(0,2); 
           
            g.DrawString(s, parent.Font, New SolidBrush(ForeColor), bounds.X, bounds.Y) 
            Dim bm As Bitmap 
            If m_Row = rowNum Then bm = Me.m_FacePressed Else bm = Me.m_Face 
            g.DrawImage(bm, bounds.Right - bm.Width, bounds.Y) 
        End Sub 
    End Class 
    调用代码: Private Function getdatagridstyle(ByVal table As DataTable) As DataGridTableStyle 
            Dim style As New DataGridTableStyle() 
            style.MappingName = table.TableName 
            style.RowHeaderWidth = 15 
            Dim i As Integer 
            For i = 0 To table.Columns.Count - 1 
                If i = 1 Then 
                    Dim textButtonColStyle As New mybuttondatagridtablestyle1(i) 'pass the column# 
                    textButtonColStyle.HeaderText = table.Columns(i).ColumnName 
                    textButtonColStyle.MappingName = table.Columns(i).ColumnName                 'hookup our cellbutton handler... 
                    AddHandler textButtonColStyle.CellButtonClicked, AddressOf HandleCellButtonClick                 style.GridColumnStyles.Add(textButtonColStyle)                 'hook the mouse handlers 
                    AddHandler DataGrid1.MouseDown, AddressOf textButtonColStyle.HandleMouseDown 
                    AddHandler DataGrid1.MouseUp, AddressOf textButtonColStyle.HandleMouseUp 
                Else 
                    Dim c As New DataGridTextBoxColumn() 
                    c.HeaderText = table.Columns(i).ColumnName 
                    c.MappingName = table.Columns(i).ColumnName 
                    style.GridColumnStyles.Add(c) 
                End If 
            Next 
            Return style 
        End Function 
        Private Sub HandleCellButtonClick(ByVal sender As Object, ByVal e As DataGridCellButtonClickEventArgs) 
            MessageBox.Show(("row " + e.RowIndex.ToString() + "  col " + e.ColIndex.ToString() + " clicked.")) 
        End Sub
      

  6.   

    http://www.codeproject.com/cs/miscctrl/cprogressdatagrid.asp
      

  7.   

    当然可以,就是得自己写tablestyle