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

data grid

مغلق
بدأه shorty في 23 أبريل 2005 · 4 رد · 722 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مثلا عندي ثلاثة أعمدة رقم و اسم و العمر

أنا أريد عندما أضغط على العمود الأول enter يظهر البيانات الباقية اوتوماتيك وهكذا ممكن مساعدة

#2

طيب يا أخي وين أنت وصلت يعني أين توقفت ولم تستطع المواصلة

ضع الكود الذي يظهر نتائج غير متوقعه أو خطأ

أو أرفق المشروع للنظر فيه . بالتوفيق إن شاء الله

في المثال يتضح المقال

#3

انا ماعندي مشكلة في إظهار البيانات للأعمدة الأخرى و لكن المشكلة معي عندما أضغط enter للcell للعمود الأول لا يظهر data في الأعمدة الأخرى لأنه لا يأخد الحدث

Private Sub DataGrid1_CurrentCellChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.CurrentCellChanged

dim i as New as

Dim r, c As Integer

c = DataGrid1.CurrentCell.ColumnNumber

If (c = 0) Then

r = DataGrid1.CurrentCell.RowNumber

DataGrid1(r, c + 1) = "hab"

End If

End Sub

كيف أستطيع أضيف أمر الضغط على enter

#4

السلام عليكم

في هذه الحالة يلزم أن نستخدم الوظيفة ProcessCmdKey لمعرفة هل تم الضغط على الزر Enter

كذلك يلزمنا أن نعرف هل نحن في العامود الأول في الـ DataGrid بلا شك عن طريق إنشاء بعض المتغيرات الرقمية و متغير منطقي واحد سيكون بهذا الشكل على إفتراض أنك أدرجت الحاوية Imports System.Data.OleDb

 Dim flag As Boolean = False
    Dim Value%, R%, C%

    Private Sub Form1_Load(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load
        Me.da.Fill(Ds1, "tb")
        Me.DataGrid1.DataSource = Ds1
        Me.DataGrid1.DataMember = "tb"

    End Sub

    Protected Overrides Function ProcessCmdKey _
      (ByRef msg As System.Windows.Forms.Message, _
      ByVal keyData As System.Windows.Forms.Keys) As Boolean
        Try
            If msg.WParam.ToInt32() = CInt(Keys.Enter) Then
                If flag Then
                    LoadReleatedData(Value)
                End If
                SendKeys.Send("{Tab}")
                Return True
            End If
            Return MyBase.ProcessCmdKey(msg, keyData)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Function

    Private Sub DataGrid1_CurrentCellChanged(ByVal sender As Object, _
    ByVal e As System.EventArgs) Handles DataGrid1.CurrentCellChanged
        R = Me.DataGrid1.CurrentCell.RowNumber
        C = Me.DataGrid1.CurrentCell.ColumnNumber
        If Me.DataGrid1.CurrentCell.ColumnNumber = 0 Then
            Value = Me.DataGrid1(R, C)
            flag = True
        Else
            flag = False
        End If

    End Sub

    Private Sub LoadReleatedData(ByVal Key As Integer)
        Me.DataGrid1.DataBindings.Clear()
        Dim strSQL As String
        Try
            cnn.Open()
            strSQL = "SELECT * FROM tb WHERE Login_ID =" & Key
            Dim cmd As New OleDbCommand(strSQL, cnn)
            da.SelectCommand = cmd
            da.Fill(Ds1, "tb")
            Me.DataGrid1.DataSource = Ds1
            cmd.Dispose()
        Catch ex As Exception
            Throw ex
        Finally
            cnn.Close()
        End Try
    End Sub

ملاحظة إذا كنت لا ترغب بأن يذهب المؤشر للعامود الثاني فقط أرجع القيمة false في الوظيفة ProcessCmdKey

بهذا الشكل

المشكلة :

طيب فيه مشكلة واحده هي أن الـ DataGrid تكون في حالة تركيز Focus فيتطلب الضغط مرة أو أخرى بالنسبة للصف الأول فقط

للمزيد عن هذه المشكلة إقراء هذا

There appears to be no method to turn off a currentcell. When a cell is being edited, it is the TextBox embedded in the columnstyle that has the focus, and is displaying the highlighted text. You will notice in this situation, if you click the grid's title bar above the column headers, this TextEdit control loses focus, and the datagrid appears to have no current cell.

We can simulate this click from code, and use it to expose a method in our datagrid to SetNoCurrentCell. Below is some code to illustrate this idea.

protected override bool ProcessKeyPreview(ref System.Windows.Forms.Message m) 

{ 

     Keys keyCode = (Keys)(int)m.WParam & Keys.KeyCode; 

     if((m.Msg == WM_KEYDOWN || m.Msg == WM_KEYUP) 

          && keyCode == Keys.Enter ) 

          return false; 

     return true; 

}

والله أعلم

EnterEventWithDataGrid.zip

في المثال يتضح المقال

#5

حلك جميل يا ( الغملاسي) وانا حاولت بطريقة اخرى تعتمد على Northwind كقاعدة بيانات

لتجربة المثال أدخل alfki في العمود الاول و من ثم Enter

وهذا المثال....

Shorty.rar

هذا الموضوع مغلق.

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