可以';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)
{
}
您首先将数据表设置为网格视图数据源,然后填充它,这是不正确的,应该像一样反过来
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();