Я добавил 3 столбца.
Измененные значения атрибутов следующие.
namespace TestWinForm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void add_Click(object sender, EventArgs e)
{
//listView1.BeginUpdate();
string[] row = { "123", "456", "789" };
ListViewItem list_view = new ListViewItem(row);
listView1.Items.Add(list_view);
textBox1.Text = listView1.Items.Count.ToString();
//listView1.EndUpdate();
}
}
}
Это код, который обновляет количество текущих строк до textbox1
после добавления строки данных каждый раз, когда нажимается кнопка add
.
Очевидно, количество строк продолжает расти.... но данные не выводятся в listView1
.
Какую часть я должен проверить?
Что означает Владелец - Правда? Вы поставили OwnerDraw = true
? Если да, то вам придется рисовать предметы самостоятельно. Ты?
Да, вы правы насчет ownerDraw. Я попробую еще раз, используя DataGridView. Спасибо
Давно не использовал Winforms, но я помню, что использование источника привязки было более надежным.
var bindingSource = new BindingSource();
bindingSource.DataSource = dataTable;
grid.DataSource = bindingSource;
//Add data to dataTable and then call
bindingSource.ResetBindings(false)
Элемент управления BindingSource
не поможет с элементом управления ListView
, поскольку он не поддерживает привязку данных. Если бы использовался DataGridView
, как, вероятно, и должно быть, то связывание через BindingSource
было бы наиболее подходящим вариантом.
Спасибо за информацию, попробую.
То, что у вас есть, должно работать в подробном представлении с добавленными столбцами. Вот пример
Представление «Дизайн»
В этом случае используется экземпляр следующего класса, чтобы позже мы могли получить информацию о конкретной строке.
public class Contact
{
public int CustomerIdentifier { get; set; }
public string CompanyName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string PhoneTypeDescription { get; set; }
public string PhoneNumber { get; set; }
public string CountryName { get; set; }
public string[] ItemArray => new[]
{
CompanyName,
FirstName,
LastName,
PhoneNumber,
CountryName
};
}
Код для фиктивного добавления
private void AddRowButton_Click(object sender, EventArgs e)
{
var companyName = "Just added";
Contact contact = new Contact()
{
CompanyName = companyName,
FirstName = "Karen",
LastName = "Payne",
PhoneNumber = "123-333-4444",
CountryName = "USA"
};
ownerContactListView.Items.Add(
new ListViewItem(contact.ItemArray)
{
Tag = contact.CustomerIdentifier
});
CountLabel.Text = $@"Row count: {ownerContactListView.Items.Count}";
var index = ownerContactListView.Items.IndexOf(
ownerContactListView.FindItemWithText(companyName));
ownerContactListView.Items[index].Selected = true;
ownerContactListView.EnsureVisible(index);
ActiveControl = ownerContactListView;
}
После добавления строки выше (обратите внимание, я сокращаю форму, поэтому вы видите частичный вид)
Вы можете увидеть всю начальную загрузку, см. следующее.
Спасибо за Вашу информацию. Я попробую и протестирую.
Вы действительно добавили столбцы в
ListView
? Я бы, наверное, порекомендовал не использоватьListView
в любом случае. В большинстве случаев, когда люди это делают, они должны использоватьDataGridView
, обычно привязанный кDataTable
или другому источнику данных черезBindingSource
.