我正在以编程方式创建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)
{
}
答案 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();