मैं वीबीएनईटी के साथ काम कर रहा हूं और अपने फॉर्म में डेटाग्रिडव्यू का उपयोग करता हूं। पहली कार्रवाई डीबी से दर्ज हो रही है। इस मामले में सभी कोशिकाओं को नहीं भरा जाता है। मैंने सक्रिय सेल को पहले खाली सेल में भी सेट किया है। फिर मैं एक अनुमत मान नहीं भरता

मैं CellEndEdit पर सत्यापन की जांच करता हूं -> msgbox "गलत मान" -> सेट मान = "" -> सेट प्रारंभ संपादित करें अब समस्या पंक्ति कर्सर अगली पंक्ति में भी चला गया

मैं गलत सेल को तब तक चुनने का समाधान ढूंढ रहा हूं जब तक कि मान सही न हो।

0
Ricardo Krause 29 मार्च 2020, 13:33
2
सत्यापन CellValidating ईवेंट हैंडलर में किया जाता है। बस बहुत हो गया। उस घटना का पूरा बिंदु वह है जिसे आप हासिल करने की कोशिश कर रहे हैं।
 – 
jmcilhinney
29 मार्च 2020, 15:08
साइट पर आपका स्वागत है! क्या आप वह कोड पोस्ट कर सकते हैं जो ठीक से काम नहीं कर रहा है? क्या आप समस्या को स्पष्ट कर सकते हैं? ऐसा लगता है कि @jmcilhinney ने जो कहा है, उसके आधार पर आप डेटा के वैध होने तक रिकॉर्ड नहीं जोड़ना चाहते हैं।
 – 
Jimmy Smith
29 मार्च 2020, 16:39

2 जवाब

यदि आप उपयोगकर्ता को वर्तमान सेल को छोड़ने से रोकना चाहते हैं यदि उन्होंने गलत मान सेट किया है, तो e.Cancel = True को CellValidating ईवेंट पर सेट करें। उदाहरण के लिए यह कोड उपयोगकर्ता को दूसरे कॉलम में सेल छोड़ने से रोकता है, अगर उन्होंने कोई नंबर टाइप नहीं किया है:

    Private Sub dataGridView1_CellValidating(sender as Object, e as DataGridViewCellValidatingEventArgs e) Handles dataGridView1.CellValidating

        'set cancel to true if colindex is 1 and TryParse returned false (not a number)
        e.Cancel = (e.ColumnIndex = 1 AndAlso Not Int32.TryParse(e.FormattedValue.ToString(), Nothing)

    End Sub

इनपुट एडिटर को खाली करने के लिए, आपको यह समझना होगा कि आप सेल को संपादित नहीं कर रहे हैं, आप एक टेक्स्टबॉक्स में टाइप कर रहे हैं, जो उस जगह के ऊपर खींचा जा रहा है जहां सेल है। अवधारणात्मक रूप से, किसी भी एक समय में प्रति डेटाग्रिडव्यू में केवल एक संपादक टेक्स्टबॉक्स होता है (और यह इसे वर्तमान सेल के लिए प्रासंगिक स्थान पर रखता है)। नियंत्रण जो वर्तमान सेल के लिए एक मान को संपादित करता है, इसलिए सेल से कोई लेना-देना नहीं है, लेकिन यह ग्रिड की एक विशेषता है, और इसे dataGridView1.EditingControl द्वारा एक्सेस किया जाता है। यह एक नियंत्रण देता है; यह किसी भी प्रकार का फॉर्म कंट्रोल (टेक्स्टबॉक्स, चेकबॉक्स, डेटपिकर इत्यादि) हो सकता है जो सेल को संपादित करता है, इसलिए संपादन नियंत्रण बेस क्लास प्रकार का नियंत्रण क्यों देता है। नियंत्रण में एक .Text संपत्ति और एक .ResetText() विधि है ताकि हम टेक्स्टबॉक्स को कास्ट करने की आवश्यकता के बिना साफ़ कर सकें (लेकिन अगर हम डेट पिकर आदि का उपयोग कर रहे थे तो हो सकता है कि इसे पहले कास्टिंग की आवश्यकता हो, उदाहरण के लिए इसके मूल्य तक पहुंच ) यह टेक्स्टबॉक्स को रीसेट कर सकता है:

    Private Sub dataGridView1_CellValidating(sender as Object, e as DataGridViewCellValidatingEventArgs e) Handles dataGridView1.CellValidating


        If e.ColumnIndex = 1 AndAlso Not Int32.TryParse(e.FormattedValue.ToString(), Nothing) Then
            e.Cancel = true
            dataGridView.EditingControl.ResetText()
        End If

    End Sub
0
Caius Jard 29 मार्च 2020, 22:13

ठीक है मदद के लिए धन्यवाद। अब मुझे अगली समस्या है। बाद में CellValidatinr ने पंक्ति कर्सर को अगली पंक्ति में ले जाया।

लेकिन मुझे वर्तमान सेल को अगले खाली क्षेत्र में सेट करना है, जैसे फॉर्म 1_लोड में मेरा संक्षिप्त परीक्षण कोड

Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        Dim i As Int32 = 0
        Dim emptyRow As Int32 = -1
        With Me.DataGridView1
            .Rows.Add(1, "E0", "E0")
            .Rows.Add(1, "", "E0")
            .Rows.Add(1, "E0", "E0")
            .Rows.Add(1, "", "E0")
            .Rows.Add(1, "E0", "E0")
            .Rows.Add(1, "", "E0")
        End With
        For i = 0 To Me.DataGridView1.Rows.Count - 1
            If Me.DataGridView1.Rows(i).Cells(1).FormattedValue.ToString = "" Then
                emptyRow = i
                Exit For
            End If
        Next
        If emptyRow > -1 Then
            Me.DataGridView1.CurrentCell = Me.DataGridView1(1, emptyRow)
        End If
    End Sub

    Private Sub DataGridView1_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
        e.Cancel = (e.ColumnIndex = 1 AndAlso e.FormattedValue.ToString <> "E0")
        If e.Cancel Then
            Me.txtMsg.Text = "Ungülitger Barcode"
            Me.DataGridView1.CancelEdit()
        End If
    End Sub

End Class

करंटसेल को अगले खाली सेल में सेट करने के लिए मैं किस इवेंट का उपयोग कर सकता हूं (1)

0
Ricardo Krause 30 मार्च 2020, 19:51