C # Add new line to listview

I am reading data from a database using SQL statements that you can enter in a text box. When I run the query, I want to add the returned data to different columns of the list.

My code is:

using (SqlConnection con = new SqlConnection(connectionString)) { con.Open(); try { using (SqlCommand cmd = new SqlCommand(textBoxQuery.Text, con)) { using (SqlDataReader reader = cmd.ExecuteReader()) { GridView view = new GridView(); string[] head = getColumnsName(textBoxQuery.Text);//Getting the columns names for (int i = 0; i != reader.FieldCount; i++) { view.Columns.Add(new GridViewColumn() { Header = head[i] });//columns heading } listView.View = view; while (reader.Read()) { for (int i = 0; i != reader.FieldCount; i++) { //inserting data into one row and different columns } Console.WriteLine(); } } } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } con.Close(); } 

Thanks in advance!

+1
c # listview wpf
source share
1 answer

If you want the columns to be generated dynamically for you in WPF, you need to dynamically add the column definitions with the appropriate bindings each time you view the list view again.

Try the following:

MainWindow.xaml.cs

 using System.Collections.Generic; using System.Windows; using System.Windows.Controls; using System.Windows.Data; namespace ListViewTest { public class Column { public string Title { get; set; } public string SourceField { get; set; } } /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); GridView gridView = new GridView(); this.myListView.View = gridView; List<dynamic> myItems = new List<dynamic>(); dynamic myItem; IDictionary<string, object> myItemValues; // Populate the objects with dynamic columns for (var i = 0; i < 100; i++) { myItem = new System.Dynamic.ExpandoObject(); foreach (string column in new string[] { "Id", "Name", "Something" }) { myItemValues = (IDictionary<string, object>)myItem; myItemValues[column] = "My value for " + column + " - " + i; } myItems.Add(myItem); } // Assuming that all objects have same columns - using first item to determine the columns List<Column> columns = new List<Column>(); myItemValues = (IDictionary<string, object>)myItems[0]; // Key is the column, value is the value foreach (var pair in myItemValues) { Column column = new Column(); column.Title = pair.Key; column.SourceField = pair.Key; columns.Add(column); } // Add the column definitions to the list view gridView.Columns.Clear(); foreach (var column in columns) { var binding = new Binding(column.SourceField); gridView.Columns.Add(new GridViewColumn { Header = column.Title, DisplayMemberBinding = binding }); } // Add all items to the list foreach (dynamic item in myItems) { this.myListView.Items.Add(item); } } } } 

XAML:

 <Window x:Class="ListViewTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:ListViewTest" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525"> <Grid> <ListView x:Name="myListView"></ListView> </Grid> </Window> 

The only thing you need to change is to add columns from the reader using the column name from the SQL query. And the entry of ExpandoObject from fields returned by the reader from your request.

This is a quick demo that I wrote and did not have access to the local database in order to check it, so that I would simulate it using for loops and an array of strings.

+1
source share

All Articles