c#在列表视图中添加新行

本文关键字:添加 新行 视图 列表 | 更新日期: 2023-09-27 18:21:06

我使用sql语句从数据库中读取数据,您可以在文本框中键入这些语句。当我运行查询时,我想将返回的数据添加到列表视图的不同列中。

我的代码:

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();
}

提前感谢!

c#在列表视图中添加新行

如果希望在WPF中为您动态生成列,则需要在每次重新填充列表视图时动态添加具有适当绑定的列定义。

试试这个:

主窗口.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>

唯一需要更改的是使用sql查询中的列名从读取器中添加列。并从查询中的reader返回的fields填充ExpandoObject

这是我写的一个快速演示,没有访问本地数据库来测试它,所以我用for循环和字符串数组来模仿它。