DataSource değiştirildikten sonra seçili DataGridView hücrelerini korumanın bir yolu var mı?DataGridView: Veri kaynağı değiştirildikten sonra seçimleri koru?
cevap
Gereksinimlerinize özel ölçütler temelinde neyin seçilmesi gerektiği ile eşleşebilir ve eşleştirmeye bağlı olarak hücre veya satırın Select özelliği özelliğini true/false olarak ayarlayabilirsiniz. İşte, basit bir örnek olarak, noktayı gösterecek yeni oluşturulan bir winforms projesine girebilirsiniz. Çalışmak için bu örnek için DataGridView's SelectionMode = FullRowSelect ayarladığınızdan emin olun. Hücre seçimlerini korumak/yeniden uygulamak isterseniz, yaklaşım benzer olacaktır. Not: Ayrıca, seçilen satır indekslerinin bir listesini de tutabilirsiniz, ancak bu, genellikle başka bir veri kaynağını yüklerken, gerçek satırlar ve verilerdeki fiziksel konumları arasında herhangi bir yazışma olacağı olasılığından dolayı genellikle mantıklı olmaz.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace DataGridViewRetainSelection
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private readonly List<Person> currentPeople = new List<Person>();
private bool dummyToggle = true;
private void Form1_Load(object sender, EventArgs e)
{
SwitchDataSource(); // will just new up the datasource
}
private void ButtonSwitchDataSourceClick(object sender, EventArgs e)
{
SwitchDataSource();
}
private void SwitchDataSource()
{
var selectedPeople = (from DataGridViewRow row in dataGridViewPeople.Rows where row.Selected select currentPeople[row.Index]).ToList();
peopleBindingSource.DataSource = null;
currentPeople.Clear();
if (dummyToggle)
{
currentPeople.Add(new Person { Name = "Joel Spolsky" });
currentPeople.Add(new Person { Name = "Jeff Atwood" });
currentPeople.Add(new Person { Name = "Jarrod Dixon" });
currentPeople.Add(new Person { Name = "Geoff Dalgas" });
currentPeople.Add(new Person { Name = "Brent Ozar" });
}
else
{
currentPeople.Add(new Person { Name = "Joel Spolsky" });
currentPeople.Add(new Person { Name = "Jeff Atwood" });
currentPeople.Add(new Person { Name = "Brent Ozar" });
}
dummyToggle = !dummyToggle;
peopleBindingSource.DataSource = currentPeople;
foreach (var person in selectedPeople)
{
foreach (DataGridViewRow row in dataGridViewPeople.Rows)
{
if (string.Equals(row.Cells[0].Value, person.Name))
{
row.Selected = true;
}
}
}
}
}
public sealed class Person
{
public string Name { get; set; }
}
}
Seçilen hücreler için aynı işlevi uygulamak için aşağıdaki gibi bir şey yapın. Kimsenin buna ihtiyacı varsa önceki kodu terk ediyorum. Not: Burada sadece anonim bir yazıyorum, muhtemelen üye alanlarına, özelliklerine vb. Bağlı olarak biraz daha karmaşık bir şeyler yapmanız gerekecek, ancak seçilen hücrelerin ayarlanmasının genel prensibi doğru şekilde gösterilip umarım anlamak için kolayca test edilir ve hata ayıklanır.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace DataGridViewRetainSelection
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private readonly List<Person> currentPeople = new List<Person>();
private bool dummyToggle = true;
private void Form1_Load(object sender, EventArgs e)
{
dataGridViewPeople.SelectionMode = DataGridViewSelectionMode.CellSelect;
SwitchDataSource(); // will just new up the datasource
}
private void ButtonSwitchDataSourceClick(object sender, EventArgs e)
{
SwitchDataSource();
}
private void SwitchDataSource()
{
var selectedPeopleAndCells = (from DataGridViewCell cell in dataGridViewPeople.SelectedCells where cell.Selected select new { Person = currentPeople[cell.RowIndex], Cell = cell }).ToList();
peopleBindingSource.DataSource = null;
currentPeople.Clear();
if (dummyToggle)
{
currentPeople.Add(new Person { Name = "Joel Spolsky", Id = 0 });
currentPeople.Add(new Person { Name = "Jeff Atwood", Id = 1 });
currentPeople.Add(new Person { Name = "Jarrod Dixon", Id = 2 });
currentPeople.Add(new Person { Name = "Geoff Dalgas", Id = 3 });
currentPeople.Add(new Person { Name = "Brent Ozar", Id = 4 });
}
else
{
currentPeople.Add(new Person { Name = "Joel Spolsky", Id = 0 });
currentPeople.Add(new Person { Name = "Jeff Atwood", Id = 1 });
currentPeople.Add(new Person { Name = "Brent Ozar", Id = 4 });
}
dummyToggle = !dummyToggle;
peopleBindingSource.DataSource = currentPeople;
foreach (var personAndCell in selectedPeopleAndCells)
{
foreach (DataGridViewRow row in dataGridViewPeople.Rows)
{
if (string.Equals(row.Cells[0].Value, personAndCell.Person.Id))
{
row.Cells[personAndCell.Cell.ColumnIndex].Selected = true;
}
}
}
}
}
public sealed class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
}
İyi çalışır, ancak tüm sıra seçildi ... DGV'de rastgele seçilen hücreleri tutmak istedim; –
Hücre seçimini göstermek için kod örneği güncellendi. –
Lütfen unutmayın, eski satırları yeni satırlarla eşleştirmek için bir çeşit kimlik alanına ihtiyacınız olacak. Umarım örnek bunu oldukça açık hale getirir. –
- 1. Veri kaynağı kullanırken datagridview hücre rengini değiştiremiyorum
- 2. Değiştirildikten sonra arama sorgusunu sıfırlamadan sayfayı yenileyin
- 3. Tepki bileşeni değiştirildikten sonra yeniden oluşturulmuyor
- 4. Uygulama iOS6 değiştirildikten sonra çöküyor - ucol_getVersion
- 5. Android TabLayout, parça değiştirildikten sonra içeriği göstermiyor
- 6. Site kaynağı konumunda veri kaynağı sorgusu nasıl kullanılır? (dinamik veri)
- 7. Glassfish'de veri kaynağı oluşturma
- 8. Excel Veri Doğrulama Kaynağı
- 9. Bağdaştırıcı verileri değiştirildikten sonra bir ListView'i yeniden boyutlandırma
- 10. datagridview
- 11. C# Shuffling DataGridView Satırları
- 12. Kullanıcının DataGridView Listesine Satır Eklemesine İzin Verme <> Veri Kaynağı
- 13. tomcat7 - jdbc veri kaynağı - Bu
- 14. SSRS Dinamik Paylaşımlı Veri Kaynağı
- 15. SmartGWT Veri kaynağı özelleştirme öğreticisi
- 16. Gettext: Kaynak değiştirildikten sonra po ve pot dosyaları nasıl güncellenir
- 17. Etki Alanı Datasource Varlık Değiştirildikten Sonra Silverlight Projesinde güncellenmiyor
- 18. Sys.stdout değiştirildikten sonra, cmd.Cmd Python readline sekmesi tamamlandı,
- 19. Görünüm, otomatik düzen kısıtlamaları program aracılığıyla değiştirildikten sonra güncellenmiyor
- 20. Modüldeki kaynak dosyaları değiştirildikten sonra projemin tümünde hata iletileri var
- 21. STL yineleyiciler, koleksiyon değiştirildikten sonra geçerliliğini garanti eder mi?
- 22. Bir "jta veri kaynağı" ve "kaynak yerel" veri kaynağı arasındaki fark?
- 23. R Şifre koru .rdata datafile
- 24. DataGridView
- 25. İki değerin rastgele seçimleri
- 26. iMacros javascript dosyasındaki Veri kaynağı dosyasını seçin
- 27. Veri kaynağı nasıl kapatılır mysql-bağlantı
- 28. jQuery autocomplete uzaktan JSON veri kaynağı döndürülemiyor
- 29. DataGridView
- 30. DataGridView
Bu iş mi Y_Y? Eğer öyleyse, cevabı lütfen cevaplandı olarak işaretleyebilir misiniz? –