无法通过编程创建的datagridview

时间:2016-08-05 19:41:43

标签: c# winforms datagridview

我正在以编程方式创建3个datagridviews,具体取决于在列表框中选择的内容。

我正在以这种方式创建它们,因为在表单上处理很多对象是混乱和困难的,这样会更清晰。

但无论我在listBox1_SelectedIndexChanged事件之外引入什么类型的事件,我已经查看了很多网站并尝试了六种不同的方式,我无法获得我创建的文本框来显示文本从这些datagridviews。 (到目前为止,我一直只使用gridC的数据)

我无法帮助,但我觉得网格的创建方式与此有关。有没有人这样做过?如果可能的话,我真的更愿意坚持创造它们。

很抱歉,如果我遗漏了某些人可能需要知道的事情。谢谢!!

代码:  (我已经删除了其他两个if语句的内容):

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.IO;
using System.Configuration;


namespace MyWiki_8_4_16
{
    public partial class Form1 : Form
    {
        SqlConnection conn = new SqlConnection("<Connection String>");
        string qryQuery = null;
        DataGridView gridC = new DataGridView();
        DataGridView gridG = new DataGridView();
        DataGridView gridF = new DataGridView();

        public Form1()
        {
            InitializeComponent();
            conn.Open();
            DataSet ds = new DataSet();
            SqlDataAdapter adapter = new SqlDataAdapter(
            "select Stuff(table_name, 1, 4, '') as table_name  from INFORMATION_SCHEMA.Tables where table_name not like 'Ref%'", conn);
            adapter.Fill(ds);
            this.listBox1.DataSource = ds.Tables[0];
            this.listBox1.DisplayMember = "table_name";
            conn.Close();
            gridC.Visible = false;
            gridC.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            string text = listBox1.GetItemText(listBox1.SelectedItem);
            string constring = ("Data Source=DSPL7722\\KATMO;Initial Catalog=Physics;Integrated Security=True");
            SqlConnection con = new SqlConnection(constring);
            if (text == "Categories")
            {
                con.Open();
                qryQuery = ("select Category from tbl_categories");
                SqlCommand cmd = new SqlCommand(qryQuery, con);
                cmd.CommandType = CommandType.Text;
                SqlDataAdapter sda = new SqlDataAdapter(cmd);
                DataTable dt = new DataTable();
                this.Controls.Add(gridC);
                gridC.DataSource = dt;
                sda.SelectCommand = cmd;
                sda.Fill(dt);
                gridC.Visible = true;
                gridF.Visible = false;
                gridG.Visible = false;
                gridC.Location = new Point(0, 0);
            }
            else if (text == "Glossary")
            {

            }
            else if (text == "Formulas")
            {

            }
        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                DataGridViewRow row = this.gridC.Rows[e.RowIndex];
                if (row != null)
                    txt_Col1.Text = row.Cells["Category"].Value.ToString();
            }
        }
    }//class
}//namespace

另一个:

private void dataGridView_SelectionChanged(object sender, EventArgs e)
{
    DataGridViewCell cell = null;
    foreach (DataGridViewCell selectedCell in gridC.SelectedCells)
    {
        cell = selectedCell;
        break;
    }
    if (cell != null)
    {
        DataGridViewRow row = cell.OwningRow;
        txt_Col1.Text = row.Cells["Category"].Value.ToString();
    }
}
private void Form1_Load(object sender, EventArgs e)
{

}

2 个答案:

答案 0 :(得分:0)

您首先将数据表设置为girdview数据源,然后填充它,这是不正确的,应该是其他方式,如

            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            this.Controls.Add(gridC);
            sda.SelectCommand = cmd;
            sda.Fill(dt);
            gridC.DataSource = dt;

此外,看起来在任何时候你只使用一个基于if块中的条件的gridview,并且我认为它不需要有3个网格视图,并且没有理由为什么你不能在设计时宣布它。

答案 1 :(得分:0)

这是你的意思吗?

您希望将数据网格中的文本/字符串值传递到文本框。

尝试这个

int index = gridC.CurrentRow.Index;
txt_Col1.Text = gridC.Rows[index].Cells["Category"].Value.ToString();