按钮列的应用。(在datagrid中加入按钮列,winforms)

datagrid|按钮

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 

时间: 2024-10-26 00:58:53

按钮列的应用。(在datagrid中加入按钮列,winforms)的相关文章

easyui datagrid中关于编辑列保存问题

问题描述 针对DataGrid中某一列可以进行编辑,然后编辑完可以可以一行行把它更新到数据库中去,目前这个保存不知道要怎么写? 解决方案 解决方案二:官网有实例vareditIndex=undefined;functionendEditing(){if(editIndex==undefined){returntrue}if($('#dg').datagrid('validateRow',editIndex)){vared=$('#dg').datagrid('getEditor',{index:

DataGrid中的模板列

问题描述 使用DataGrid中的模板时出问题了!我在模板列的ItemTemplate中使用了CheckBox控件;CheckBox中的AuotPostback改了TRUE(我想当CheckBox被选时,我要使这一行其他的模板列或绑定列成为编辑状态)但是不知道怎么写!希望哥哥姐姐门能帮我解决!谢谢! 解决方案 解决方案二:www.componentart.com你来这个网站看看他的控件.

JavaScript实现DataGrid中添加CheckBox列

datagrid|javascript (一).功能     1. JavaScript检索CheckBox并实现全选和全消功能          用C#等写的CheckBox需要回发到服务端执行,         而用JavaScript可以在直接客户端实现,效率高些 (二).代码 1. DataGrid中的代码主要片段:   <Columns>    <HeaderTemplate>       //头模板代码    <asp:CheckBox id="chkH

解决excel中文件1指定的列复制到文件2中指定的列

这个问题已经困扰我好几天了,具体是什么问题呢.就是我有两个excel表格文件名为1和2,我现在想把文件2中指定列的值提取到文件1中相对应的列中. 如果只是这两个文件,自己手工复制粘贴一下,也就吧了.可现在的问题是,有100多个文件呢.要是都手工来弄的话,那人都要崩溃了. 既然想偷懒,那就先去百度.google上找找了.呵呵,也被咱找到了类似的代码.是需要VBA的呢,宏,你懂得.代码修改如下: Sub hs() Dim sh As Worksheet, sht As Worksheet Set s

datagrid中设置下载列,点击按钮下载文件夹中文件

问题描述 文件名都存放在数据库中 解决方案 解决方案二:就输出数据库中的二进制流到页面中就行了嘛解决方案三:文件存在数据库里还是服务器上?反正都差不多,你想问什么?

DataGrid中由某列的值设定行的颜色

datagrid 今天真是的,又被界面搞的晕头转向. 为了实现.Net window DataGrid 的某一行可以根据该行某列的值的内容设定该行颜色的功能. 先贴一个连接,里面有DataGrid很多功能扩充的解决方案Windows Forms Datagrid 不过没有我这个需求的解决方案,最后终于还是在同事的帮助下搞定了. 由某一个单元格的值设定该单元格的颜色的实现我就不贴了,上面的连接里面有解决方案.下面是由某列的值设定整行颜色的一个解决方案. 关键是在定制的DataGridTextBox

怎么在datagrid中添加一列combobox

问题描述 代码:<s:DataGridx="252"y="103"width="1046"height="244"fontStyle="italic"fontWeight="bold"requestedRowCount="4"textAlign="center"><s:columns><s:ArrayList>&

DataGrid中加多选按钮

datagrid|按钮   aspx文件中加<script language="javascript">  <!--  //CheckBox全选And反全选  function select_deselectAll (chkVal, idVal)   {   var frm = document.forms[0];   for (i=0; i<frm.length; i++)    {    if (idVal.indexOf ('CheckAll') != -

将DataGrid中满足条件的行设为不同的背景色(WinForm).

datagrid|条件 由于项目需要, 需要对DataGrid的数据行, 按不同的条件以不同的背景色相区别. 由于DataGrid中没有相关的属性和方法可以直接设置,要完成这个功能还挺费些功夫.在网上搜了半天,也没找到解决方案.只好自己动手,丰衣足食了,:) .研究了半天, 终于搞定它了.好东西不敢独享,特贴出来,希望能给需要的人带来些帮助. { //... //使用DataGridTableStyle 显示DataGrid. DataGridTableStyle tableStyle = ne