【发布时间】:2017-09-01 10:06:42
【问题描述】:
我有 2 个表格
- ApodeikseisTimologion
- EggrafesTimologionEsodon
ApodeikseisTimologion 是主窗体,EggrafesTimologionEsodon 是子窗体,每个窗体中有 1 个数据网格视图(dataGridViewProionApodeixeisTimologiouEsodon 和 dataGridViewEggrafesProionParastikouEsodon)。
DataGridViewProionApodeixeisTimologiouEsodon 属于主窗体,dataGridViewEggrafesProionParastikouEsodon 属于子窗体。
现在,我想将检查的值从子表单传递到父表单,而不会丢失我已经在父表单的其他文本框中放入的值。
这是我的代码:
形成 ApodeikseisTimologion。 我用它来打开子窗体
private void LinkLblEisagogiEggrafon_Click(object sender, EventArgs e) {
EggrafesTimologionEsodon eggrTimolEsodon = new EggrafesTimologionEsodon(cmbBoxEponimiaPelatiApodeixeisTimologiouEsodon.Text);
eggrTimolEsodon.ShowDialog();
this.Refresh();
}
形成 EggrafesTimologionEsodon
private void EggrafesTimologionEsodon_Load(object sender, EventArgs e) {
try {
con = new SqlConnection();
con = DBAccess.Conn;
con.Open();
adap = new SqlDataAdapter("select ProionParastatikou.* from ProionParastatikou inner join Parastatiko on ProionParastatikou.ParastatikoID = Parastatiko.ParastatikoID" +
" where ProionParastatikou.Ypoloipo > 0.00 and Parastatiko.Eponimia = '" + txtPelatisId.Text + "'", con);
ds = new System.Data.DataSet();
adap.Fill(ds, "BsProionParastatikouEsodon");
dataGridViewEggrafesProionParastikouEsodon.DataSource = ds.Tables[0];
con.Close();
}
catch (Exception ex) {
MessageBox.Show("Error\n" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally {
if (MyConn.State != ConnectionState.Closed)
MyConn.Close();
}
}
我有这张图片:
在子表单中,我还可以检查 datagridview 复选框列中的行并将它们存储到列表中,以便将它们传输到父表单,而不会丢失我已经拥有的其他数据。
private void BtnProsthikiEggrafon_Click(object sender, EventArgs e) {
ApodeixeisTimologion apo = new ApodeixeisTimologion(null);
List<Int64> lst2send = new List<Int64>();
Int64 toSend;
foreach (DataGridViewRow eggrafes in dataGridViewEggrafesProionParastikouEsodon.Rows) {
if (Convert.ToBoolean(eggrafes.Cells["CheckBoxColumn"].Value)) {
int RowIndexCheck = eggrafes.HeaderCell.RowIndex;
Int64.TryParse(dataGridViewEggrafesProionParastikouEsodon.Rows[RowIndexCheck].Cells["proionParastatikouIDDataGridViewTextBoxColumn"].Value.ToString(),out toSend);
lst2send.Add(toSend);
}
}
apo.AfterProsthikiProionParastatikou(null, null, lst2send);
//apo.Refresh();
this.Close();
}
当子窗体关闭时,我在父窗体中有它:
public void AfterProsthikiProionParastatikou(object sender,EventArgs e,IList<Int64> lst) {
String csvLst = string.Empty;
int count = 0;
foreach ( Int64 lstItems in lst) {
if (count == 0) {
csvLst = lstItems.ToString();
count += 1;
}
else {
csvLst = csvLst + "," + lstItems.ToString();
}
}
_con = new SqlConnection();
_con = DBAccess.Conn;
_con.Open();
adap = new SqlDataAdapter("select ProionParastatikou.* from ProionParastatikou where" +
" ProionParastatikou.Ypoloipo > 0.00 and ProionParastatikou.ProionParastatikouID"+
" in( " + csvLst + ")", _con);
ds = new System.Data.DataSet();
adap.Fill(ds, "bsProionApodeixeisTimologiouEsodon");//
dataGridViewProionApodeixeisTimologiouEsodon.DataSource = ds.Tables["bsProionApodeixeisTimologiouEsodon"];
//dataGridViewProionApodeixeisTimologiouEsodon.Refresh();
_con.Close();
}
我在
中做了一个断点ds = new System.Data.DataSet();
adap.Fill(ds, "bsProionApodeixeisTimologiouEsodon");//
dataGridViewProionApodeixeisTimologiouEsodon.DataSource = ds.Tables["bsProionApodeixeisTimologiouEsodon"];
我看到 ds 填充了正确的值,但行没有出现在 dataGridViewProionApodeixeisTimologiouEsodon 中,它是父表单中的网格。
在所有表单中,我在数据网格中使用数据集和 bindingSources,并且数据网格是有界的,除了复选框列。 有人可以帮忙吗。 如果有人需要更多帮助,我会提供。
【问题讨论】:
-
感谢编辑...您能帮忙吗?
-
对不起,我不明白问题是什么......也许你能试着更好地解释这里的问题是什么?
-
问题是我无法在主窗体中传输它们
-
您的意思是您在子表单中的网格中的数据没有被传输到主表单中吗?
-
你是对的......
标签: c# vb.net forms winforms datagridview