可以';t从程序创建的数据网格视图中获取要在文本框中显示的数据

本文关键字:数据 获取 文本 显示 视图 网格 程序 创建 数据网 可以 | 更新日期: 2023-09-27 18:01:00

我正在根据列表框中选择的内容以编程方式创建3个数据网格视图。

我用这种方式创建它们是因为在表单上处理很多对象既混乱又困难,这要干净得多。

但是,无论我在listBox1_SelectedIndexChanged事件之外介绍了什么类型的事件,并且我查看了很多网站并尝试了六种不同的方法,我都无法获得我创建的文本框来显示这些数据网格视图中的文本。(到目前为止,我只处理来自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)
{
}

可以';t从程序创建的数据网格视图中获取要在文本框中显示的数据

您首先将数据表设置为网格视图数据源,然后填充它,这是不正确的,应该像一样反过来

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

此外,根据if块中的条件,看起来在任何时候你都只使用一个网格视图,因此我认为没有必要有3个网格视图。而且,没有理由不能在设计时声明它。

这就是你的意思吗?

您希望将数据网格中的text/string值传递到文本框中。

试试这个

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