<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-94  評論-56  文章-3  trackbacks-0

    對于下面的表格數據,我們經常會見到,
    20090601 00001 100 abc 1 sumisu
    20080601 00001 120 abc 1 yasio
    20070601 00001 150 def 1 toms
    20050601 00001 190 efg 1 arabama


    但有時候我們希望將同一列中內容相同的單元格合并,變成下面這樣:
    20090601 00001 100 abc 1 sumisu
    20080601 120 yasio
    20070601 150 def toms
    20050601 190 efg arabama

    那么該如何實現呢?
    在網上調查了很多方法,也請教了很多人,雖然有一些解決方法,但都不是最理想的。
    偶爾下載到一個例子,很漂亮地實現了這個功能,不過是C#的,于是我花了不少時間,終于將她用VB.net實現了,在這里與各位分享。

    Imports System
    Imports System.Collections.Generic
    Imports System.ComponentModel
    Imports System.Data
    Imports System.Drawing
    Imports System.Drawing.Design
    Imports System.Text
    Imports System.Windows.Forms
    Imports System.Collections
    Imports System.Reflection
    Imports System.Runtime.InteropServices

    Public Class RowMergeView
        
    Inherits DataGridView

        
    Protected Overrides Sub OnCellPainting(ByVal e As DataGridViewCellPaintingEventArgs)

            
    If e.RowIndex > -1 And e.ColumnIndex > -1 Then
                DrawCell(e)
            
    End If

        
    End Sub


        
    '/ <summary>
        '/ DrawCell
        '/ </summary>
        '/ <param name="e"></param>
        Private Sub DrawCell(ByVal e As DataGridViewCellPaintingEventArgs)
            
    If e.CellStyle.Alignment = DataGridViewContentAlignment.NotSet Then
                e.CellStyle.Alignment 
    = DataGridViewContentAlignment.MiddleCenter
            
    End If
            
    Dim gridBrush As Brush = New SolidBrush(Me.GridColor)
            
    'Dim backBrush As SolidBrush = New SolidBrush(e.CellStyle.BackColor)
            Dim backBrush As SolidBrush = New SolidBrush(Color.White)
            
    Dim fontBrush As SolidBrush = New SolidBrush(e.CellStyle.ForeColor)
            
    Dim cellwidth As Integer
            
    Dim UpRows As Integer = 0
            
    Dim DownRows As Integer = 0
            
    Dim count As Integer = 0
            
    If Me.MergeColumnNames.Contains(Me.Columns(e.ColumnIndex).Name) And e.RowIndex <> -1 Then
                cellwidth 
    = e.CellBounds.Width
                
    Dim gridLinePen As Pen = New Pen(gridBrush)
                
    Dim curValue As String = CType(e.Value, String)
                
    IIf(curValue Is Nothing"", e.Value.ToString().Trim())
                
    Dim curSelected As String = CType(Me.CurrentRow.Cells(e.ColumnIndex).Value, String)
                
    IIf(curSelected Is Nothing""Me.CurrentRow.Cells(e.ColumnIndex).Value.ToString().Trim())
                
    'If Not String.IsNullOrEmpty(curValue) Then
                Dim i As Integer
                
    For i = e.RowIndex To Me.Rows.Count - 1 Step i + 1
                    
    If Me.Rows(i).Cells(e.ColumnIndex).Value.ToString().Equals(curValue) Then

                        DownRows 
    = DownRows + 1
                        
    If e.RowIndex <> i Then
                            cellwidth 
    = cellwidth
                            
    IIf(cellwidth < Me.Rows(i).Cells(e.ColumnIndex).Size.Width, cellwidth, Me.Rows(i).Cells(e.ColumnIndex).Size.Width)
                        
    End If
                    
    Else
                        
    Exit For
                    
    End If
                
    Next

                
    Dim j As Integer
                
    For j = e.RowIndex To 0 Step j - 1
                    
    If Me.Rows(j).Cells(e.ColumnIndex).Value.ToString().Equals(curValue) Then

                        UpRows 
    = UpRows + 1
                        
    If e.RowIndex <> j Then
                            cellwidth 
    = cellwidth
                            
    IIf(cellwidth < Me.Rows(j).Cells(e.ColumnIndex).Size.Width, cellwidth, Me.Rows(j).Cells(e.ColumnIndex).Size.Width)
                        
    End If
                    
    Else
                        
    Exit For
                    
    End If
                
    Next

                count 
    = DownRows + UpRows - 1
                
    If count < 2 Then
                    
    Return
                
    End If
                
    'End If
                If Me.Rows(e.RowIndex).Selected Then
                    backBrush.Color 
    = e.CellStyle.SelectionBackColor
                    fontBrush.Color 
    = e.CellStyle.SelectionForeColor
                
    End If

                e.Graphics.FillRectangle(backBrush, e.CellBounds)

                PaintingFont(e, cellwidth, UpRows, DownRows, count)
                
    If DownRows = 1 Then
                    e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom 
    - 1, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1)
                    count 
    = 0
                
    End If

                e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right 
    - 1, e.CellBounds.Top, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1)

                e.Handled 
    = True
            
    End If
        
    End Sub


        
    '/ <summary>
        '/ PaintingFont
        '/ </summary>
        Private Sub PaintingFont(ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs, ByVal cellwidth As IntegerByVal UpRows As IntegerByVal DownRows As IntegerByVal count As Integer)
            
    Dim fontBrush As SolidBrush = New SolidBrush(e.CellStyle.ForeColor)
            
    Dim fontheight As Integer = CType(e.Graphics.MeasureString(e.Value.ToString(), e.CellStyle.Font).Height, Integer)
            
    Dim fontwidth As Integer = CType(e.Graphics.MeasureString(e.Value.ToString(), e.CellStyle.Font).Width, Integer)
            
    Dim cellheight As Integer = e.CellBounds.Height

            
    If e.CellStyle.Alignment = DataGridViewContentAlignment.BottomCenter Then
                e.Graphics.DrawString(
    CType(e.Value, String), e.CellStyle.Font, fontBrush, CType(e.CellBounds.X + (cellwidth - fontwidth) / 2Single), e.CellBounds.Y + cellheight * DownRows - fontheight)
            
    ElseIf e.CellStyle.Alignment = DataGridViewContentAlignment.BottomLeft Then
                e.Graphics.DrawString(
    CType(e.Value, String), e.CellStyle.Font, fontBrush, e.CellBounds.X, e.CellBounds.Y + cellheight * DownRows - fontheight)
            
    ElseIf e.CellStyle.Alignment = DataGridViewContentAlignment.BottomRight Then
                e.Graphics.DrawString(
    CType(e.Value, String), e.CellStyle.Font, fontBrush, e.CellBounds.X + cellwidth - fontwidth, e.CellBounds.Y + cellheight * DownRows - fontheight)
            
    ElseIf e.CellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter Then
                e.Graphics.DrawString(
    CType(e.Value, String), e.CellStyle.Font, fontBrush, CType(e.CellBounds.X + (cellwidth - fontwidth) / 2Single), CType(e.CellBounds.Y - cellheight * (UpRows - 1+ (cellheight * count - fontheight) / 2Single))
            
    ElseIf e.CellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft Then
                e.Graphics.DrawString(
    CType(e.Value, String), e.CellStyle.Font, fontBrush, e.CellBounds.X, CType(e.CellBounds.Y - cellheight * (UpRows - 1+ (cellheight * count - fontheight) / 2Single))
            
    ElseIf e.CellStyle.Alignment = DataGridViewContentAlignment.MiddleRight Then
                e.Graphics.DrawString(
    CType(e.Value, String), e.CellStyle.Font, fontBrush, e.CellBounds.X + cellwidth - fontwidth, CType(e.CellBounds.Y - cellheight * (UpRows - 1+ (cellheight * count - fontheight) / 2Single))
            
    ElseIf e.CellStyle.Alignment = DataGridViewContentAlignment.TopCenter Then
                e.Graphics.DrawString(
    CType(e.Value, String), e.CellStyle.Font, fontBrush, e.CellBounds.X + CType((cellwidth - fontwidth) / 2Single), e.CellBounds.Y - cellheight * (UpRows - 1))
            
    ElseIf e.CellStyle.Alignment = DataGridViewContentAlignment.TopLeft Then
                e.Graphics.DrawString(
    CType(e.Value, String), e.CellStyle.Font, fontBrush, e.CellBounds.X, e.CellBounds.Y - cellheight * (UpRows - 1))
            
    ElseIf e.CellStyle.Alignment = DataGridViewContentAlignment.TopRight Then
                e.Graphics.DrawString(
    CType(e.Value, String), e.CellStyle.Font, fontBrush, e.CellBounds.X + cellwidth - fontwidth, e.CellBounds.Y - cellheight * (UpRows - 1))
            
    Else
                e.Graphics.DrawString(
    CType(e.Value, String), e.CellStyle.Font, fontBrush, e.CellBounds.X + CType((cellwidth - fontwidth) / 2Single), CType(e.CellBounds.Y - cellheight * (UpRows - 1+ (cellheight * count - fontheight) / 2Single))
            
    End If
        
    End Sub


        
    '/ <summary>
        '/ MergeColumnNames
        '/ </summary>
        Public Property MergeColumnNames() As List(Of String)
            
    Get
                
    Return _mergecolumnname
            
    End Get
            
    Set(ByVal Value As List(Of String))
                _mergecolumnname 
    = Value
            
    End Set
        
    End Property

        
    Private _mergecolumnname As List(Of String= New List(Of String)()

    End Class


    Imports System
    Imports System.Collections.Generic
    Imports System.ComponentModel
    Imports System.Data
    Imports System.Drawing
    Imports System.Text
    Imports System.Windows.Forms


    Public Class Form1

        
    Public Sub New()
            InitializeComponent()
            
    Dim dt As DataTable = New DataTable()
            
    Dim i As Integer
            dt.Columns.Add(
    "1")
            dt.Columns.Add(
    "2")
            dt.Columns.Add(
    "3")
            dt.Columns.Add(
    "4")
            dt.Columns.Add(
    "5")
            dt.Columns.Add(
    "6")
            dt.Rows.Add(
    "20090601""00001""100""abc""1""sumisu")
            dt.Rows.Add(
    "20080601""00001""120""abc""1""yasio")
            dt.Rows.Add(
    "20070601""00001""150""def""1""toms")
            dt.Rows.Add(
    "20050601""00001""190""efg""1""arabama")
            
    Me.rowMergeView1.DataSource = dt
            
    Me.rowMergeView1.ColumnHeadersHeight = 20
            
    Me.rowMergeView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing
            
    For i = 1 To dt.Columns.Count
                
    Me.rowMergeView1.MergeColumnNames.Add("Column" & i)
            
    Next
        
    End Sub

    End Class


    <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
    Partial 
    Class Form1
        
    Inherits System.Windows.Forms.Form

        
    'フォームがコンポーネントの一覧をクリーンアップするために dispose をオーバーライドします。
        <System.Diagnostics.DebuggerNonUserCode()> _
        
    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
            
    Try
                
    If disposing AndAlso components IsNot Nothing Then
                    components.Dispose()
                
    End If
            
    Finally
                
    MyBase.Dispose(disposing)
            
    End Try
        
    End Sub


        
    'Windows フォーム デザイナで必要です。
        Private components As System.ComponentModel.IContainer

        
    'メモ: 以下のプロシージャは Windows フォーム デザイナで必要です。
        'Windows フォーム デザイナを使用して変更できます。  
        'コード エディタを使って変更しないでください。
        <System.Diagnostics.DebuggerStepThrough()> _
        
    Private Sub InitializeComponent()
            
    Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Form1))
            
    Me.Panel1 = New System.Windows.Forms.Panel
            
    Me.Button1 = New System.Windows.Forms.Button
            
    Me.rowMergeView1 = New testMearge.RowMergeView
            
    Me.Column1 = New System.Windows.Forms.DataGridViewTextBoxColumn
            
    Me.Column2 = New System.Windows.Forms.DataGridViewTextBoxColumn
            
    Me.Column3 = New System.Windows.Forms.DataGridViewTextBoxColumn
            
    Me.Column4 = New System.Windows.Forms.DataGridViewTextBoxColumn
            
    Me.Column5 = New System.Windows.Forms.DataGridViewTextBoxColumn
            
    Me.Column6 = New System.Windows.Forms.DataGridViewTextBoxColumn
            
    Me.Panel1.SuspendLayout()
            
    CType(Me.rowMergeView1, System.ComponentModel.ISupportInitialize).BeginInit()
            
    Me.SuspendLayout()
            
    '
            'Panel1
            '
            Me.Panel1.Controls.Add(Me.Button1)
            
    Me.Panel1.Dock = System.Windows.Forms.DockStyle.Bottom
            
    Me.Panel1.Location = New System.Drawing.Point(0312)
            
    Me.Panel1.Name = "Panel1"
            
    Me.Panel1.Size = New System.Drawing.Size(59531)
            
    Me.Panel1.TabIndex = 1
            
    '
            'Button1
            '
            Me.Button1.Location = New System.Drawing.Point(4995)
            
    Me.Button1.Name = "Button1"
            
    Me.Button1.Size = New System.Drawing.Size(7523)
            
    Me.Button1.TabIndex = 0
            
    Me.Button1.Text = "Button1"
            
    Me.Button1.UseVisualStyleBackColor = True
            
    '
            'rowMergeView1
            '
            Me.rowMergeView1.AllowUserToAddRows = False
            
    Me.rowMergeView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill
            
    Me.rowMergeView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
            
    Me.rowMergeView1.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {Me.Column1, Me.Column2, Me.Column3, Me.Column4, Me.Column5, Me.Column6})
            
    Me.rowMergeView1.Dock = System.Windows.Forms.DockStyle.Fill
            
    Me.rowMergeView1.Location = New System.Drawing.Point(00)
            
    Me.rowMergeView1.MergeColumnNames = CType(resources.GetObject("rowMergeView1.MergeColumnNames"), System.Collections.Generic.List(Of String))
            
    Me.rowMergeView1.Name = "rowMergeView1"
            
    Me.rowMergeView1.RowTemplate.Height = 21
            
    Me.rowMergeView1.Size = New System.Drawing.Size(595343)
            
    Me.rowMergeView1.TabIndex = 0
            
    '
            'Column1
            '
            Me.Column1.DataPropertyName = "1"
            
    Me.Column1.HeaderText = "日期"
            
    Me.Column1.Name = "Column1"
            
    '
            'Column2
            '
            Me.Column2.DataPropertyName = "2"
            
    Me.Column2.HeaderText = "代碼"
            
    Me.Column2.Name = "Column2"
            
    '
            'Column3
            '
            Me.Column3.DataPropertyName = "3"
            
    Me.Column3.HeaderText = "價格"
            
    Me.Column3.Name = "Column3"
            
    '
            'Column4
            '
            Me.Column4.DataPropertyName = "4"
            
    Me.Column4.HeaderText = "備注"
            
    Me.Column4.Name = "Column4"
            
    '
            'Column5
            '
            Me.Column5.DataPropertyName = "5"
            
    Me.Column5.HeaderText = "標志"
            
    Me.Column5.Name = "Column5"
            
    '
            'Column6
            '
            Me.Column6.DataPropertyName = "6"
            
    Me.Column6.HeaderText = "更新者"
            
    Me.Column6.Name = "Column6"
            
    '
            'Form1
            '
            Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 12.0!)
            
    Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
            
    Me.ClientSize = New System.Drawing.Size(595343)
            
    Me.Controls.Add(Me.Panel1)
            
    Me.Controls.Add(Me.rowMergeView1)
            
    Me.Name = "Form1"
            
    Me.Text = "Form1"
            
    Me.Panel1.ResumeLayout(False)
            
    CType(Me.rowMergeView1, System.ComponentModel.ISupportInitialize).EndInit()
            
    Me.ResumeLayout(False)

        
    End Sub

        
    Friend WithEvents rowMergeView1 As RowMergeView
        
    Friend WithEvents Panel1 As System.Windows.Forms.Panel
        
    Friend WithEvents Button1 As System.Windows.Forms.Button
        
    Friend WithEvents Column1 As System.Windows.Forms.DataGridViewTextBoxColumn
        
    Friend WithEvents Column2 As System.Windows.Forms.DataGridViewTextBoxColumn
        
    Friend WithEvents Column3 As System.Windows.Forms.DataGridViewTextBoxColumn
        
    Friend WithEvents Column4 As System.Windows.Forms.DataGridViewTextBoxColumn
        
    Friend WithEvents Column5 As System.Windows.Forms.DataGridViewTextBoxColumn
        
    Friend WithEvents Column6 As System.Windows.Forms.DataGridViewTextBoxColumn

    End Class


    運行結果如下:
     
    原C#代碼:
    /Files/xiekai-blog/DataGridView.rar
    posted on 2009-06-17 12:36 小言身寸 閱讀(12705) 評論(18)  編輯  收藏 所屬分類: . NET 開發

    評論:
    # re: vb.net中dataGridView的單元格的合并 2010-01-20 14:09 | JonesVale
    請問以下代碼是如何所得 ,請指點,謝謝!
    '
    'rowMergeView1
    '
    Me.rowMergeView1.AllowUserToAddRows = False
    Me.rowMergeView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill
    Me.rowMergeView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
    Me.rowMergeView1.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {Me.Column1, Me.Column2, Me.Column3, Me.Column4, Me.Column5, Me.Column6})
    Me.rowMergeView1.Dock = System.Windows.Forms.DockStyle.Fill
    Me.rowMergeView1.Location = New System.Drawing.Point(0, 0)
    Me.rowMergeView1.MergeColumnNames = CType(resources.GetObject("rowMergeView1.MergeColumnNames"), System.Collections.Generic.List(Of String))
    Me.rowMergeView1.Name = "rowMergeView1"
    Me.rowMergeView1.RowTemplate.Height = 21
    Me.rowMergeView1.Size = New System.Drawing.Size(595, 343)
    Me.rowMergeView1.TabIndex = 0

      回復  更多評論
      
    # re: vb.net中dataGridView的單元格的合并 2010-01-21 14:44 | JonesVale
    中心是這一句
    Me.rowMergeView1.MergeColumnNames = CType(resources.GetObject("rowMergeView1.MergeColumnNames"), System.Collections.Generic.List(Of String))
      回復  更多評論
      
    # re: vb.net中dataGridView的單元格的合并 2010-04-26 15:53 | youke
    以上代碼在vs2008中需要將and改為andalso  回復  更多評論
      
    # re: vb.net中dataGridView的單元格的合并 2010-12-16 19:56 | pxfinal
    為什么我試了一下,總是顯示“為將對象引用到實例”,當添加
    Me.RowMergeView1.MergeColumnNames.Add("Column" & i)這個時候

    Set(ByVal Value As Collection)
    _mergecolumnname = Value ‘value=nothing
    End Set
    這樣就將這個屬性再次賦值為空了, 無法添加。  回復  更多評論
      
    # re: vb.net中dataGridView的單元格的合并 2011-03-18 14:27 | xiekai
    你好可能把源碼發給我嗎?
    郵箱:niaiyaolong@163.com
    謝謝!  回復  更多評論
      
    # re: vb.net中dataGridView的單元格的合并 2011-04-16 21:07 | xinbo
    Protected Overrides Sub OnCellPainting(ByVal e As DataGridViewCellPaintingEventArgs) '

    If e.RowIndex > -1 AndAlso e.ColumnIndex > -1 AndAlso e.Value IsNot Nothing(此處添加判斷) Then
    DrawCell(e)
    End If

    End Sub

    修改第二處:

    For i = e.RowIndex To Me.Rows.Count - 1 Step i + 1
    If Me.Rows(i).Cells(e.ColumnIndex).Value Is Nothing Then
    Exit For
    End If ‘添加一個判斷
    If Me.Rows(i).Cells(e.ColumnIndex).Value.ToString().Equals(curValue) Then

    DownRows = DownRows + 1
    If e.RowIndex <> i Then
    cellwidth = cellwidth
    IIf(cellwidth < Me.Rows(i).Cells(e.ColumnIndex).Size.Width, cellwidth, Me.Rows(i).Cells(e.ColumnIndex).Size.Width)
    End If
    Else
    Exit For
    End If
    Next  回復  更多評論
      
    # re: vb.net中dataGridView的單元格的合并 2011-05-10 16:50 | 阿胡
    你好!可發一份源碼給我嗎?非常感謝!
    nineheads@tom.com
      回復  更多評論
      
    # re: vb.net中dataGridView的單元格的合并 2011-05-23 16:49 | 阿伍
    你好,自學很久了始終不入門,能給份源碼。非常感謝!郵箱:443272678@QQ.com  回復  更多評論
      
    # re: vb.net中dataGridView的單元格的合并 2011-06-12 18:23 | acicd
    你好可能把源碼發給我嗎?
    acicd@sohu.com  回復  更多評論
      
    # re: vb.net中dataGridView的單元格的合并[未登錄] 2012-11-23 16:55 | KK
    請問可以寄一份 VB 的源碼嗎?
    謝謝您~
    fwt0209@gmail.com  回復  更多評論
      
    # re: vb.net中dataGridView的單元格的合并 2013-02-06 09:27 | icemna
    Me.RowMergeView1.MergeColumnNames = New List(Of String)
    For i = 1 To dt.Columns.Count
    Me.rowMergeView1.MergeColumnNames.Add("Column" & i)
    Next
    對MergeColumnNames賦值(Add)之前要實例化的。l
      回復  更多評論
      
    # re: vb.net中dataGridView的單元格的合并 2013-02-23 11:03 | 0514
    請問可以寄一份 VB 的源碼嗎?
    謝謝您~
    郵箱:431093685@QQ.com   回復  更多評論
      
    # re: vb.net中dataGridView的單元格的合并 2013-07-08 12:32 | billycwy
    您好,請問可以寄一份VB.net 的源碼嗎?
    萬分感謝
    謝謝您了
    郵箱:8230220@qq.com  回復  更多評論
      
    # re: vb.net中dataGridView的單元格的合并 2013-07-29 19:24 | 芙蓉妮
    期盼許久了......
    原先是用vb做的系統,無法實現單元格合并問題,近期剛剛改學vb.net,看到樓主已經實現了此功能我欣喜若狂,希望能拜讀到樓主的源碼,萬分感謝
    frownies@139.com
      回復  更多評論
      
    # re: vb.net中dataGridView的單元格的合并 2013-10-30 17:10 | 112
    為什么我選中合并單元格的最后一行,合并單元格的內容就會消失  回復  更多評論
      
    # re: vb.net中dataGridView的單元格的合并 2013-11-09 14:10 | Surfing
    可以寄一份vb.net源碼給我嗎?
    ms101690@pchome.com.tw  回復  更多評論
      
    # re: vb.net中dataGridView的單元格的合并 2014-11-18 11:08 | uyfghfv
    你好,可以寄一份源碼給我嗎?keobo.wang@deltaww.com.cn  回復  更多評論
      
    # re: vb.net中dataGridView的單元格的合并 2015-08-28 09:07 | ヒツ
    合并的單元格無法選中,如何解決,還有我想在合并的單元個里繪checkbox怎么弄  回復  更多評論
      
    主站蜘蛛池模板: 五月婷婷在线免费观看| 四虎永久在线精品免费一区二区| 成人一区二区免费视频| 又粗又大又硬又爽的免费视频| 亚洲成AV人综合在线观看| 久久久久国色av免费看| 亚洲av永久无码精品古装片| 男人进去女人爽免费视频国产| 亚洲精品无码乱码成人 | 国产精品亚洲专区无码WEB| 免费毛片在线看片免费丝瓜视频 | 精品久久亚洲中文无码| 在线观看特色大片免费视频| 亚洲AV无码精品蜜桃| 欧美好看的免费电影在线观看| 亚洲性无码一区二区三区| 国产色爽女小说免费看| 成年免费大片黄在线观看com| 自拍偷自拍亚洲精品被多人伦好爽| a级成人免费毛片完整版| 久久久久亚洲av无码专区| 久九九精品免费视频| 亚洲国产成人综合精品| 国产L精品国产亚洲区久久| 中国一级特黄高清免费的大片中国一级黄色片 | 日韩精品人妻系列无码专区免费| 久久国产亚洲高清观看| 一本无码人妻在中文字幕免费 | 国产成人免费ā片在线观看老同学| 亚洲AV无码国产丝袜在线观看| 免费A级毛片无码A∨免费| 亚洲精品国产综合久久久久紧 | 337p日本欧洲亚洲大胆裸体艺术| 99在线观看视频免费| 精品国产亚洲第一区二区三区| 毛茸茸bbw亚洲人| 亚洲性在线看高清h片| 日本视频在线观看永久免费| 亚洲一区二区三区在线观看网站| 免费又黄又硬又爽大片| 免费人妻无码不卡中文字幕系|