Verilerde gezinme (Windows Forms .NET)
Veri kaynağındaki kayıtlarda gezinmenin en kolay yolu, bir BindingSource bileşeni veri kaynağına bağlamak ve ardından denetimleri öğesine bağlamaktır BindingSource
. Daha sonra , , MovePreviousve MoveFirstgibi MoveLastMoveNextyerleşik gezinti yöntemini BindingSource
kullanabilirsiniz. Bu yöntemlerin kullanılması ve Current özelliklerini BindingSource
uygun şekilde ayarlarPosition. Ayrıca, özelliğini ayarlayarak bir kaydı bulabilir ve geçerli kayıt olarak ayarlayabilirsiniz Position
.
Veri kaynağındaki kayıt konumunu artırmak için
Position Gerekli kayıt konumuna gitmek için bağlı verileriniz için özelliğini BindingSource kayıt konumuna ayarlayın. Aşağıdaki örnekte, öğesini seçtiğinizde özelliğini artırmak Position
için yönteminin BindingSource
kullanılması MoveNext gösterilmektedirnextButton
. BindingSource
, bir veri kümesinin Customers
Northwind
tablosuyla ilişkilendirilir.
private void nextButton_Click(object sender, System.EventArgs e)
{
this.customersBindingSource.MoveNext();
}
Private Sub nextButton_Click(ByVal sender As Object,
ByVal e As System.EventArgs) Handles nextButton.Click
Me.customersBindingSource.MoveNext()
End Sub
Dekont
Özelliğin Position ilk veya son kaydın ötesinde bir değere ayarlanması hataya neden olmaz çünkü Windows Forms, konumu listenin sınırları dışındaki bir değere ayarlamaz. İlk kaydı mı yoksa son kaydı mı geçtiğinizi bilmek önemliyse, veri öğesi sayısını aşıp aşmayabileceğinizi test etmek için mantık ekleyin.
İlk kaydı mı yoksa son kaydı mı aştığınızı denetlemek için
Olay için bir olay işleyicisi PositionChanged oluşturun. İşleyicide, önerilen konum değerinin gerçek veri öğesi sayısını aşıp aşmadığını test edebilirsiniz.
Aşağıdaki örnekte, son veri öğesine ulaşıp ulaşmadığınız nasıl test edilebileceği gösterilmektedir. Örnekte, son öğedeyseniz, formdaki İleri düğmesi devre dışı bırakılır.
void customersBindingSource_PositionChanged(object sender, EventArgs e)
{
if (customersBindingSource.Position == customersBindingSource.Count - 1)
nextButton.Enabled = false;
else
nextButton.Enabled = true;
}
Sub customersBindingSource_PositionChanged(ByVal sender As Object,
ByVal e As EventArgs)
If customersBindingSource.Position =
customersBindingSource.Count - 1 Then
nextButton.Enabled = False
Else
nextButton.Enabled = True
End If
End Sub
Dekont
Kodda gezindiğiniz listeyi değiştirirseniz, kullanıcıların yeni listenin tüm uzunluğuna göz atabilmesi için İleri düğmesini yeniden etkinleştirmeniz gerektiğini unutmayın. Ayrıca, üzerinde çalıştığınız belirli BindingSource bir olay için yukarıdaki PositionChanged olayın olay işleme yöntemiyle ilişkilendirilmesi gerektiğini unutmayın.
Bir kaydı bulmak ve geçerli öğe olarak ayarlamak için
Geçerli öğe olarak ayarlamak istediğiniz kaydı bulun. Find Veri kaynağınız tarafından uygulanıyorsaIBindingList, örneğinde gösterildiği gibi yöntemini BindingSource kullanın. Uygulayan IBindingList
BindingList<T> veri kaynaklarına örnek olarak ve DataViewverilebilir.
void findButton_Click(object sender, EventArgs e)
{
int foundIndex = customersBindingSource.Find("CustomerID", "ANTON");
customersBindingSource.Position = foundIndex;
}
Sub findButton_Click(ByVal sender As Object, ByVal e As EventArgs) _
Handles findButton.Click
Dim foundIndex As Integer = customersBindingSource.Find("CustomerID",
"ANTON")
customersBindingSource.Position = foundIndex
End Sub
Alt tablodaki seçili satırın doğru konumda kaldığından emin olmak için
Windows Forms'da veri bağlamayla çalışırken, verileri üst/alt öğe veya ana/ayrıntı görünümünde görüntülersiniz. Bu, aynı kaynaktaki verilerin iki denetimde görüntülendiği bir veri bağlama senaryosudur. Bir denetimde seçimin değiştirilmesi, ikinci denetimde görüntülenen verilerin değişmesine neden olur. Örneğin, ilk denetim bir müşteri listesi, ikincisi ise ilk denetimde seçili müşteriyle ilgili siparişlerin listesini içerebilir.
Verileri üst/alt görünümde görüntülediğinizde, alt tabloda seçili durumda olan satırın tablonun ilk satırına sıfırlanmasını sağlamak için ek adımlar gerçekleştirmeniz gerekebilir. Bunu yapmak için alt tablo konumunu önbelleğe alıp üst tablo değiştikten sonra sıfırlamanız gerekir. Genellikle alt tablo sıfırlama, üst tablonun bir satırındaki alan ilk kez değiştiğinde gerçekleşir.
Geçerli alt tablo konumunu önbelleğe almak için
Alt tablo konumunu depolamak için bir tamsayı değişkeni ve alt tablo konumunun önbelleğe alınıp alınmayacağını depolamak için bir Boole değişkeni bildirin.
private int cachedPosition = -1; private bool cacheChildPosition = true;
Private cachedPosition As Integer = -1 Private cacheChildPosition As Boolean = True
Bağlamanın ListChangedCurrencyManager olayını işleyip öğesinin olup ListChangedTypeResetolmadığını denetleyin.
öğesinin geçerli konumunu CurrencyManagerdenetleyin. Listedeki ilk girdiden (genellikle 0) büyükse, bunu bir değişkene kaydedin.
void relatedCM_ListChanged(object sender, ListChangedEventArgs e) { // Check to see if this is a caching situation. if (cacheChildPosition && cachePositionCheckBox.Checked) { // If so, check to see if it is a reset situation, and the current // position is greater than zero. CurrencyManager relatedCM = sender as CurrencyManager; if (e.ListChangedType == ListChangedType.Reset && relatedCM.Position > 0) // If so, cache the position of the child table. cachedPosition = relatedCM.Position; } }
Private Sub relatedCM_ListChanged(ByVal sender As Object, ByVal e As ListChangedEventArgs) ' Check to see if this is a caching situation. If cacheChildPosition AndAlso cachePositionCheckBox.Checked Then ' If so, check to see if it is a reset situation, and the current ' position is greater than zero. Dim relatedCM As CurrencyManager = sender If e.ListChangedType = ListChangedType.Reset _ AndAlso relatedCM.Position > 0 Then ' If so, cache the position of the child table. cachedPosition = relatedCM.Position End If End If End Sub
Üst para birimi yöneticisi için üst listenin CurrentChanged olayını işleyin. İşleyicide Boole değerini önbelleğe alma senaryosu olmadığını gösterecek şekilde ayarlayın.
CurrentChanged
gerçekleşirse, üst öğede yapılan değişiklik bir liste konumu değişikliğidir ve öğe değeri değişikliği değildir.void bindingSource1_CurrentChanged(object sender, EventArgs e) { // If the CurrentChanged event occurs, this is not a caching // situation. cacheChildPosition = false; }
' Handle the current changed event. This event occurs when ' the current item is changed, but not when a field of the current ' item is changed. Private Sub bindingSource1_CurrentChanged(ByVal sender As Object, ByVal e As EventArgs) Handles bindingSource1.CurrentChanged ' If the CurrentChanged event occurs, this is not a caching ' situation. cacheChildPosition = False End Sub
Alt tablo konumunu sıfırlamak için
PositionChanged Alt tablo bağlamasının CurrencyManagerolayını işleyebilir.
Alt tablo konumunu önceki yordamda kaydedilen önbelleğe alınmış konuma sıfırlayın.
void relatedCM_PositionChanged(object sender, EventArgs e) { // Check to see if this is a caching situation. if (cacheChildPosition && cachePositionCheckBox.Checked) { CurrencyManager relatedCM = sender as CurrencyManager; // If so, check to see if the current position is // not equal to the cached position and the cached // position is not out of bounds. if (relatedCM.Position != cachedPosition && cachedPosition > 0 && cachedPosition < relatedCM.Count) { relatedCM.Position = cachedPosition; cachedPosition = -1; } } }
Private Sub relatedCM_PositionChanged(ByVal sender As Object, ByVal e As EventArgs) ' Check to see if this is a caching situation. If cacheChildPosition AndAlso cachePositionCheckBox.Checked Then Dim relatedCM As CurrencyManager = sender ' If so, check to see if the current position is ' not equal to the cached position and the cached ' position is not out of bounds. If relatedCM.Position <> cachedPosition AndAlso cachedPosition > 0 AndAlso cachedPosition < relatedCM.Count Then relatedCM.Position = cachedPosition cachedPosition = -1 End If End If End Sub
Kod örneğini test etmek için aşağıdaki adımları uygulayın:
Örneği çalıştırın.
Önbellek ve sıfırlama konumu onay kutusunun seçili olduğundan emin olun.
Üst tablonun bir alanında değişikliğe neden olmak için Üst alanı temizle düğmesini seçin. Alt tablodaki seçili satırın değişmediğini fark edin.
Örneği kapatın ve yeniden çalıştırın. Sıfırlama davranışı yalnızca üst satırdaki ilk değişiklikte gerçekleştiğinden yeniden çalıştırmanız gerekir.
Önbellek ve konumu sıfırla onay kutusunu temizleyin.
Üst alanı temizle düğmesini seçin. Alt tablodaki seçili satırın ilk satıra değiştiğine dikkat edin.
Ayrıca bkz.
.NET Desktop feedback
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin