2009-02-22 19 views
14

पर प्रोग्रामेटिक रूप से चयन परिवर्तन I VB.NET सीख रहा हूं।डेटाग्रिड व्यू (.NET)

CurrentCell के मान को सेट करने का प्रयास करते समय मुझे DataGridView घटक के साथ कोई समस्या है। मैं जो करने की कोशिश कर रहा हूं वह है:

मेरे पास डेटाग्रिड व्यू मूल्यों के साथ है। मैं अपने रूपों में एक बटन बनाना चाहता हूं और उस पर क्लिक करते समय मैं वर्तमान पंक्ति से चयन को अगले में बदलना चाहता हूं। अधिक जानकारी देने के लिए, मेरे बटन पर क्लिक करके मैं एक डेटा ग्रिडव्यू पर माउस क्लिक के अनुकरण को अनुकरण करना चाहता हूं।

मुझे आशा है कि आप मेरी मदद कर सकते हैं,

धन्यवाद!

उत्तर

21

हो सकता है कि कुछ इस तरह:

If DataGridView1.RowCount > 0 Then 

     Dim MyDesiredIndex As Integer = 0 

     If DataGridView1.CurrentRow.Index < DataGridView1.RowCount - 1 Then 
      MyDesiredIndex = DataGridView1.CurrentRow.Index + 1 
     End If 

     DataGridView1.ClearSelection()    
     DataGridView1.CurrentCell = DataGridView1.Rows(MyDesiredIndex).Cells(0) 
     DataGridView1.Rows(MyDesiredIndex).Selected = True 

    End If 

नोट 1: शायद इन दो लाइनें जरूरी नहीं हैं। मैं यह साबित कर दिया haven't

 DataGridView1.ClearSelection()    
     DataGridView1.CurrentCell = DataGridView1.Rows(MyDesiredIndex).Cells(0) 

नोट 2: ध्यान दें कि अगर हम अंतिम पंक्ति में हैं, यह पहले

3

आपको विशेष पंक्ति की चयनित संपत्ति को सत्य में सेट करने की आवश्यकता है। मुझे लगता है कि वीबी कुछ इस तरह होगा:

someDGV.Rows(index).Selected = True 
0

आप इसे इस तरह से कर सकता है:

If DataGridView1.CurrentRow.Index < DataGridView1.Rows.Count Then 
    DataGridView1.Rows(DataGridView1.CurrentRow.Index + 1).Selected = True 
End If 
2

को जाता है अपने डेटा ग्रिड एक BindingSource के लिए बाध्य है, तो यह बेहतर है वहाँ स्थिति को बदलने:

Object key = Convert.ToInt32(cdr["WordList"]); 
int itemFound = lexiconNamesBindingSource.Find("ID_Name", key); 
lexiconNamesBindingSource.Position = itemFound; 

... और आप इसे के साथ बंद समाप्त करने के लिए आवश्यकता हो सकती है:

lexiconNamesBindingSource.ResetBidings(); 

(यह एक पुरानी धागा है, लेकिन मैं यह पाया है, तो किसी और को इस उपयोगी लग सकते)

+1

धन्यवाद! यह हमारे लिए चाल है, जहां अन्य उत्तरों नहीं थे। – David

2

बस BindingSource.MoveNext() और BindingSource.MovePrevious() तरीकों का उपयोग।

0

चयनित पंक्ति प्राप्त करने के लिए, आपको चयनित पंक्तियों (0) का उपयोग करना चाहिए Index CurrentRow के बावजूद। क्योंकि यदि आप प्रोग्रामेटिकल रूप से एक पंक्ति बनाते हैं, तो अगली बार आपको CurrentRow.Index में 0 मिलेगा। तो ठीक है की तरह होगा:

If DataGridView1.SelectedRows(0).Index < DataGridView1.RowCount - 1 Then 
    MyDesiredIndex = DataGridView1.SelectedRows(0).Index + 1 
End If 

DataGridView1.Rows(MyDesiredIndex).Selected = True 
0

जवाब जो ऊपर पर विचार मैं इस के लिए loooking कम से कम 4 घंटे बिताए एकदम सही है पर विस्तार। और यह मानते हुए कि आपके डेटाग्रिडव्यू को dgvDevices कहा जाता है ...इस कोड को घटना है जिसमें आप आप वापस ले जाने के रूप में outbounce जाने के लिए और अपनी पंक्तियों पर आगे

Private Sub btnPrev_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrev.Click 
    Try 
     dgvDevices.ClearSelection() 
     Dim currentr As Integer = dgvDevices.CurrentCell.RowIndex 
     dgvDevices.CurrentCell = dgvDevices.Rows(currentr - 1).Cells(0) 
     dgvDevices.Rows(currentr - 1).Selected = True 
    Catch ex As Exception 
     dgvDevices.CurrentCell = dgvDevices.Rows(0).Cells(0) 
     dgvDevices.Rows(0).Selected = True 
    End Try 

End Sub 

Private Sub btnForw_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnForw.Click 
    Try 
     dgvDevices.ClearSelection() 
     Dim currentr As Integer = dgvDevices.CurrentCell.RowIndex 
     dgvDevices.CurrentCell = dgvDevices.Rows(currentr + 1).Cells(0) 
     dgvDevices.Rows(currentr + 1).Selected = True 
    Catch ex As Exception 
     dgvDevices.CurrentCell = dgvDevices.Rows(dgvDevices.RowCount - 1).Cells(0) 
     dgvDevices.Rows(dgvDevices.RowCount - 1).Selected = True 
    End Try 
End Sub 
0

Javiers इसके अलावा सही जवाब, यदि आप अपने DataGridView के लिए BindingSource उपयोग कर रहे हैं संभाल लेंगे तो यह बेहतर होगा चयनित आइटम को बदलने के लिए datagridview.CurrentCell का उपयोग करने के बजाय बाध्यकारी स्रोत से:

' Example Definitions 
Dim bsExample As New BindingSource 
Dim dgv As New DataGridView 
dgv.DataSource = bsExample 

' Example code to change current row position 
Dim desiredIndex As Integer = 10 
bsExample.Position = desiredIndex 
संबंधित मुद्दे