الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[كود] لتلوين أسطر الــ DataGridView و حفظ اللون في قاعدة البيانات

بدأه حسام الشامي في 28 ديسمبر 2013 · 2 رد · 1,601 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ....

عملت في مشروع , طلب فيه تلوين سطر في DataGridView  او عقدة في Tree  , بحيث أن المستخدم هو الذي يحدد هذا اللون (مثلا المستخدم يريد تلوين السجلات التي لم يتأكد تماما من بياناتها باللون الأصفر بحيث يسهل عليه إيجادها لاحقا)  ... و أحببت مشاركتكم الأكواد ...

يتم حفظ اللون في قاعدة البيانات كرقم صحيح ..

يتم تحويل اللون لرقم بالدالة : 

ColorDialog1.Color.ToArgb()

يتم تحويل الرقم إلى لون بالدالة :

Color.FromArgb

لتلوين أسطر الغريد مباشرة , عند إضافتها , نستخدم الحدث RowsAdded   .. 

الكود كاملا : 

Imports System.Data.OleDb

Public Class Form1
    Dim adapter As OleDbDataAdapter
    Dim dt As New DataTable
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim connection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=" + Application.StartupPath + "\db.mdb" + ";Persist Security Info=False")
        adapter = New OleDbDataAdapter("SELECT * FROM Employee", connection)
        adapter.Fill(dt)
        DataGridView1.AutoGenerateColumns = False
        DataGridView1.DataSource = dt
    End Sub

    Private Sub BtnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSave.Click
        DataGridView1.EndEdit(DataGridViewDataErrorContexts.CurrentCellChange)
        Dim commandBuilder As New OleDbCommandBuilder(adapter)
        adapter.Update(dt)
        'to reload new ID
        dt.Clear()
        adapter.Fill(dt)
        MsgBox("Save OK....")

    End Sub

    Private Sub BtnChangeColor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnChangeColor.Click
        If DataGridView1.SelectedRows.Count = 0 Then
            DataGridView1.CurrentRow.Selected = True
            'MsgBox("No rows were selected, Select full row from row header.")
            'Exit Sub
        End If

        If ColorDialog1.ShowDialog <> Windows.Forms.DialogResult.Cancel Then
            Dim drv As DataRowView
            Dim dr As DataRow
            For Each dgvRow As DataGridViewRow In DataGridView1.SelectedRows
                If dgvRow.IsNewRow Then Exit For
                drv = dgvRow.DataBoundItem
                dr = drv.Row
                dr("RowColor") = ColorDialog1.Color.ToArgb()
                dgvRow.DefaultCellStyle.BackColor = ColorDialog1.Color
            Next
        End If
    End Sub

    Private Sub DataGridView1_RowsAdded(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewRowsAddedEventArgs) Handles DataGridView1.RowsAdded
        Dim drv As DataRowView
        Dim dr As DataRow
        Dim dgvRow As DataGridViewRow
        For index = e.RowIndex To e.RowIndex + e.RowCount - 1
            dgvRow = DataGridView1.Rows(index)
            If dgvRow.IsNewRow Then Exit For
            drv = dgvRow.DataBoundItem
            dr = drv.Row
            If Not IsDBNull(dr("RowColor")) Then
                dgvRow.DefaultCellStyle.BackColor = Color.FromArgb(dr("RowColor"))
            Else
                dgvRow.DefaultCellStyle = Nothing
            End If
        Next
    End Sub
End Class

 و المثال في المرفقات .. 

تطوير المثال  :

سنقوم بتعديل المثال بحيث يمكننا طباعة الألوان في كريستال ريبورت .. 

نضيف ثلاثة حقول للجدول R G B  من نوع Number  و حجم كل منها Byte   (كي لا نهدر مساحة القاعدة) ... لحفظ اللون بالتنسيق RGB  .. (نلغي حقل اللون السابق)

كريستال ريبوت فيه الدالة Color  التي تأخذ ثلاث وسطاء أرقام هي R G B  ..

من Section Expert  نأخذ Details  ثم التبويب Color   ثم نضغط على زر الصيغة (x-2)  الخاصة باللون و نكتب الكود : 

Color ({Employee.R}, {Employee.G}, {Employee.B})

أي سيتم تلوين خلفية السجل الحالي حسب قيم R G B  في السجل الحالي ..

المثال في المرفقات ..

ColoredRowsDGV.rar

ColoredRowsDGV_UP.rar

تم تعديل هذه المشاركة بواسطة حسام الشامي في 10 يناير 2014 في 23:56

2

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#2

المثال أكثر من رائع يا أخي الفاضل حسام

وفعلا مفيد جدا 

أنا شخصيا تعلمت منه الكثير

 

شكرا جزيلا لك

certifiedj.jpg

 

 

Image Hosted by ImageShack.us
#3

شكرا جزيلاً 

الصراحة أبدعت ومفيد جدا جداً

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…