首页 > 解决方案 > 如何在c#中动态创建datagridview

问题描述

我正在创建一个工具,用户可以在其中添加Data source和名称data base以连接其数据库,然后表及其列将显示该连接的数据库,然后用户可以选择列以生成报告。

我所做的: 我完成了连接数据库并获取表和列。

我现在需要做什么: 但现在我需要这样的东西

在此处输入图像描述

显示表格及其列,添加按钮也将位于每列的前面,当用户添加任何列时,它将显示类似这样的内容

在此处输入图像描述

然后单击“生成报告”按钮,它将生成一个报告

这是代码:

 private void button1_Click_1(object sender, EventArgs e)
        {
            datasource = "Data Source=" + datasourceTxt.Text;
            connectionString = datasource + ";" + "Initial Catalog=" + databaseTxt.Text + ";Integrated Security=True";
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                List<string> tables = new List<string>();
                List<string> columns = new List<string>();

                DataTable dt = conn.GetSchema("Tables");
                foreach (DataRow row in dt.Rows)
                {
                    string tablename = (string)row[2];
                    tables.Add(tablename);
                }
                conn.Close();
                int tableCount = Convert.ToInt32(tables.Count.ToString());

                for (var i = 0; i < tableCount; i++)
                {
                    var sortedNames = GetColumnNames(connectionString, tables[i].ToString()).OrderBy(x => x);
                    foreach (var columnName in sortedNames)
                    {
                        columns.Add(columnName);
                    }

                }

获取列方法:

private IEnumerable<string> GetColumnNames(string conStr, string tableName)
        {
            var result = new List<string>();
            using (var sqlCon = new SqlConnection(conStr))
            {
                sqlCon.Open();
                var sqlCmd = sqlCon.CreateCommand();
                sqlCmd.CommandText = "select * from " + tableName + " where 1=0";  // No data wanted, only schema
                sqlCmd.CommandType = CommandType.Text;

                var sqlDR = sqlCmd.ExecuteReader();
                var dataTable = sqlDR.GetSchemaTable();

                foreach (DataRow row in dataTable.Rows) result.Add(row.Field<string>("ColumnName"));
            }

            return result;
        }

如果你们中的任何人知道如何做到这一点,请提供帮助。

标签: c#sqldatagridview

解决方案


推荐阅读