WinForm
在A窗体中点击BUTT打开B窗体,双击B双体DGV中某行,把该行对应列的数据赋值给A窗体的textbox?简单的处理办法,
窗体B 定义一个 公有的 属性,
窗体B,点击某一行后,把该行的数据 赋给这个 公有的属性,
窗体A,获取该属性的值。
{
formB b = new formB();
b.show();
if(b.dialogResult = DialogResult.OK)
{
extbox.text = b.abc;
}
}
类似于这样吧
有CurrentRow, SelectedCells和Rows三种方法:
1. CurrentRow:单击DataGridView任一位置都可以赋值到textBox,这种方法最好用.
private void dgvACC_CellClick(object sender, DataGridViewCellEventArgs e)
{
string data1 = dgvACC.CurrentRow.Cells[0].Value.ToString();
string data2 = dgvACC.CurrentRow.Cells[1].Value.ToString();
txtACC.Text = data1;
txtPWD.Text = data2;
}
2. SelectedCells: 用SelectedRows时必须 单击该行最前面的的方格而不能点击表格里有数据的单元格,如果点击表内则会报错: 索引超出范围。必须为非负值并小于集合大小。参数名: index.
用断点调试查看了一下, txtPWD.Text的Count值等于txtACC.Text的Count值,显然是个错误.
private void dgvACC_CellClick(object sender, DataGridViewCellEventArgs e)
{
string data2 = dgvACC.SelectedCells[0].Value.ToString();
string data3 = dgvACC.SelectedCells[2].Value.ToString();
txtACC.Text = data1;
txtPWD.Text = data2;
}
3. 而第三种方式是教材上提供的案例Rows, 这个方法缺点就是DataGridView第一行无法选中,其他都正常
private void dgvACC_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex>0)
{
String strACC = (String)dgvACC.Rows[e.RowIndex].Cells[0].Value;
sqlcon = new SqlConnection(Myclass.Myclass1.sqlCon);
SqlDataAdapter sqlda = new SqlDataAdapter("select AccountID,Password from tb_Power where AccountID=”strACC”", sqlcon);
DataSet myds = new DataSet();
sqlda.Fill(myds);
if (myds.Tables[0].Rows.Count >0)
{
txtACC.Text = myds.Tables[0].Rows[0][1].ToString();
txtPWD.Text = myds.Tables[0].Rows[0][2].ToString();
}
}
}
对比以上三种方法,新手小白使用CurrentRow最完美。
找到一段原来写的代码 ,打开链接数据库窗口,链接成功后 ,把链接内容 传递给 当前窗口。。
private void toolStripButton1_Click(object sender, EventArgs e)
{
DB.DataBase_LoginForm dataForm = new DB.DataBase_LoginForm(this._global_const);
DialogResult result = dataForm.ShowDialog();
if (result == DialogResult.OK)
{
this._global_const.USER_DB_LINK_STRING = dataForm.DBString;
this._global_const.USER_DB_SERVER = dataForm.DBSource;
this._global_const.USER_DB_DATABASE = dataForm.DBDataBase;
this._global_const.USER_DB_USER = dataForm.DBUser;
this._global_const.USER_DB_PASS = dataForm.DBPass;
this._global_const.DB_SERVER_TYPE = dataForm.ServerType;
//this.toolStripStatusLabel1.Text = "";
//this.toolStripStatusLabel1.Text = "当前数据库:" + dataForm.DBSource + "当前登录用户:" + dataForm.DBUser;
this.Cursor = Cursors.WaitCursor;
//读取表格
if (dataForm.ServerType == DBServerType.MySQL)
{
SetTableListByMySQL(true);
}
else if (dataForm.ServerType == DBServerType.SQLServer)
{
SetTableListBySQLServer(true);
}
}
else
{
//MessageBox.Show("数据库连接失败!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
//this._user_db_link_string = string.Empty;
}
this.Cursor = Cursors.Default;
}
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 fm = new Form2();
fm.ShowT(this);
}
public void Tst(string t) {
this.textBox1.Text = t;
}
//Form2窗口:
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
fm.Tst(this.textBox1.Text);
}
Form1 fm = new Form1();
public void ShowT(Form1 Fm) {
this.Show();
fm = Fm;
}
希望对你有帮助
private void toolStripButton1_Click(object sender, EventArgs e)
{
bForm dataForm = new bForm();
DialogResult result = dataForm.ShowDialog();
if (result == DialogResult.OK) //bForm 关闭时 要设置一下 dialogResult 的值 是 OK
{
this.textBoxAAA.Text= dataForm.ABC ;
}
else
{
}
this.Cursor = Cursors.Default;
}
public string ABC = "";
B窗口
private void button1_Click(object sender, EventArgs e)
{
this.ABC = "我是选中的数据";
this.DialogResult = DialogResult.OK;
this.Close();
}
谢谢,按照你的方法搞定了,
还想请教下在A窗体,textbox文本框里输入代码或名称,实现模糊搜索,并在弹出的下拉框显示搜索结果怎么论坛回帖机实现?
没有现成的代码可以参考。
土办法:文本框下面放一个 combox(让文本框把 combox隐藏掉。),文本框文字变更单时候,刷新combox的列表内容。。。