2016-07-05 48 views
1

和平每个人,我有这个问题与datagridimagecolumn,它显示x图像,如果没有字节图像上传到特定的行。这是下面的图片,向您展示我特别提到的内容。如何在DataGridImageColumn上将X图像制作为空白图像? - VB.Net

所以,我有一个展示的图片框的图像没有问题,但是,我的问题是,[红色X]图像。我怎样才能使它成为一个空白图像或空图像?

这是我的代码,显示我的数据从数据库到datagridview与自动拉伸图像列的代码(也许它可以帮助我?)。

'------------REFRESH DISPLAY------------' 
Public Sub RefreshUser() 
    '------------CONNECTION DATABASE------------' 
    Dim connectionUser As New SqlConnection(_1LoginForm.connectionstring) 
    '------------QUERY------------' 
    sqlUser = "SELECT * FROM [1UserAccounts]" 
    '------------START CONNECTION------------' 
    connectionUser.Open() 
    '------------SQL------------' 
    sCommandUser = New SqlCommand(sqlUser, connectionUser) 
    sAdapterUser = New SqlDataAdapter(sCommandUser) 
    sBuilderUser = New SqlCommandBuilder(sAdapterUser) 
    sDsUser = New DataSet() 

    sAdapterUser.Fill(sDsUser, "User") 
    sTableUser = sDsUser.Tables("User") 

    '------------SET OF BINDING SOURCE------------' 
    Userbindingsource.DataSource = sDsUser.Tables("User") 

    '------------CLOSE CONNECTION------------' 
    connectionUser.Close() 

    '------------DATA BINDINGS------------' 
    DGVViewEditForm.DataSource = Userbindingsource 
    BNViewEditForm.BindingSource = Userbindingsource 


    TBUserAccountID.DataBindings.Clear() 
    TBUserCompanyID.DataBindings.Clear() 
    TBUserFullName.DataBindings.Clear() 
    TBUserName.DataBindings.Clear() 
    TBUserPassword.DataBindings.Clear() 
    TBUserRole.DataBindings.Clear() 

    '------------DATA BINDINGS ADDITION------------' 
    TBUserAccountID.DataBindings.Add("text", Userbindingsource, "UserAccountID") 
    TBUserCompanyID.DataBindings.Add("text", Userbindingsource, "UserCompanyID") 
    TBUserFullName.DataBindings.Add("text", Userbindingsource, "UserFullName") 
    TBUserName.DataBindings.Add("text", Userbindingsource, "UserName") 
    TBUserPassword.DataBindings.Add("text", Userbindingsource, "UserPassword") 
    TBUserRole.DataBindings.Add("text", Userbindingsource, "UserRole") 

    '------------DATA GRID VIEW SELECTION------------' 
    DGVViewEditForm.SelectionMode = DataGridViewSelectionMode.FullRowSelect 
    DGVViewEditForm.MultiSelect = False 


    '------------STRETCHES COLUMNS WITH IMAGES------------' 
    For i As Integer = 0 To DGVViewEditForm.ColumnCount - 1 
     If TypeOf DGVViewEditForm.Columns(i) Is DataGridViewImageColumn Then 
      DirectCast(DGVViewEditForm.Columns(i), DataGridViewImageColumn).ImageLayout = DataGridViewImageCellLayout.Stretch 

     End If 
    Next 

End Sub 

这就是我的问题,我希望有人能帮助我。提前致谢!

+0

使用单元格格式事件后的“空白”的形象 - 它必须是实际的图像 – Plutonix

+0

您能不能给任何类型的示例代码? –

回答

1

您可以处理CellFormatting事件以调解和提供不同的图像。对于一个完全空白的外观,你将需要一个小的PNG图像,这只是一个透明的背景。

下面的代码将提供一个问号图片为丢失的图像占位符,并为新用户行中的加号图标:

' form level declarations: 
Private NewRowImage As Image 
Private NoImage As Image 
... 
' Assign them in the ctor or form load: 
NewRowImage = My.Resources.add 
NoImage = My.Resources.question 

不使用/重用图像直接阻止为每一行创建一个新的图像对象。该CellFormatting事件:

' use your column index: 
If e.ColumnIndex = 5 Then 
    If dgv1.Rows(e.RowIndex).IsNewRow Then 
     e.Value = NewRowImage 
     e.FormattingApplied = True 
    ElseIf (e.Value Is Nothing) OrElse (DBNull.Value.Equals(e.Value)) Then 
     e.Value = NoImage 
     e.FormattingApplied = True 
    End If 
End If 

你可能只需要测试DBNull,在没有测试是为了安全起见。结果:

enter image description here

+0

谢谢你回答我的问题!这帮助我在这个问题上取得进展。现在我正在处理错误消息。 “System.FormatException:单元格的格式化值的类型错误。”再次感谢你! –

+0

听起来像是你把图像放在错误的列中,或者你认为图像真的不是。检查DataError事件中可用的信息。 – Plutonix

+1

我的e.ColumnIndex = 5是错误的,应该放了7.非常感谢帮助我在这一个plutonix! :) –