C# 如何从datagridview创建主详细信息

C# 如何从datagridview创建主详细信息,c#,winforms,datagridview,master-detail,C#,Winforms,Datagridview,Master Detail,此代码插入数据库中 private void btnSave_Click(object sender, EventArgs e) { byte[] imageBt = null; FileStream fstream = new FileStream(this.txtImgPath.Text,FileMode.Open,FileAccess.Read); BinaryReader Br = new BinaryReader(fstream

此代码插入数据库中

 private void btnSave_Click(object sender, EventArgs e)
    {
        byte[] imageBt = null;
        FileStream fstream = new FileStream(this.txtImgPath.Text,FileMode.Open,FileAccess.Read);
        BinaryReader Br = new BinaryReader(fstream);
        imageBt = Br.ReadBytes((int)fstream.Length);
       // byte[] pic = stream.ToArray();
        try
        {
            conDB.Open();
            OleDbCommand command = new OleDbCommand();
            command.Connection = conDB;
            command.CommandText = "insert into abaanaCC (CCSpn_CODE,CCFname,CCLname,CCMname,CCDOB,CCgender,CCSchool,CaClass,CCVillage,CCSiblings,CCGuardian,CCContact,CCImage)" +
                " values ('" + spn_codetxt.Text + "','" + txtfname.Text + "','" + lnametxt.Text + "','" + mnametxt.Text + "','" + DOBDTPicker1.Text + "','" + gendercomboBox.Text + "','" + schtxt.Text + "','" + classcomboBox.Text + "','" + villatxt.Text + "','" + siblingscombobx.Text + "','" + guardiantxt.Text + "','" + contacttxt.Text + "',@IMG) ";
            command.Parameters.Add(new OleDbParameter("@IMG",imageBt));
            //command.Parameters.AddWithValue("@IMG",pic);
            command.ExecuteNonQuery();
            MessageBox.Show("Record Saved");
        }
        catch (Exception ex)
        {
            MessageBox.Show("Unable to save" + ex);
        }
        conDB.Close();
    }
这就是datagridview

private void Update_Load(object sender, EventArgs e)
    {
        // TODO: This line of code loads data into the 'abaanaDataSet.abaanaCC' table. You can move, or remove it, as needed.
        this.abaanaCCTableAdapter.Fill(this.abaanaDataSet.abaanaCC);

    }
我使用单元格单击事件,这样当单击单元格时,该行的内容,即
CCImage
CCSpn\u代码
就会出现。
CCSpn_代码
出现在
Ptxtspn_代码
文本框中。问题是我正在转换的字节[]图像。它只显示第一行的图像。如何使
PpicBox
显示我在
datagridView
上单击的任何行中的任何图像,就像
Ptxtspn\u code
textBox

 private void abaanaCCDataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
    {
            this.Ptxtspn_code.Text = this.abaanaCCDataGridView.SelectedRows[0].Cells[this.dataGridViewTextBoxColumn2.Name].Value.ToString();
this.abaanaCCTableAdapter.Fill(this.abaanaDataSet.abaanaCC);           
byte[] mydata = (byte[])this.abaanaDataSet.abaanaCC.Rows[0]["CCImage"];
          MemoryStream stream = new MemoryStream(mydata);           
         this.PpicBox.Image =Image.FromStream(stream);

 }

注意:

  • CellClick
    事件中,您应该检查单击是否不在行标题或列标题上
  • e.RowIndex
    是单击单元格的行索引,
    e.ColumnIndex
    是单击单元格的列索引
  • 要获取单击行的值,可以使用:
    • yourDGV.Rows[e.RowIndex]。单元格[“GridColumnName”]。值
    • yourDGV.Rows[e.RowIndex]。单元格[2]。值
    • ((DataRowView)yourDGV.Rows[e.RowIndex].DataBoundItem)[2]
    • ((DataRowView)yourDGV.Rows[e.RowIndex].DataBoundItem)[“DataTableColumnName”]
  • 我不知道为什么要在
    CellClick
    中填写abaanaCC,因为您在表单加载事件中加载数据,所以包括CCImage在内的所有值都存在于数据表中。所以我把它拿走了。似乎只有当您希望加载数据而不是在单元格单击中加载数据时,才应该填充它
例如,您的代码可能如下所示:

private void abaanaCCDataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex < 0 || e.ColumnIndex < 0)
        return;

    this.Ptxtspn_code.Text = this.abaanaCCDataGridView.Rows[e.RowIndex].Cells[this.dataGridViewTextBoxColumn2.Name].Value.ToString();       
    byte[] mydata = (byte[])this.abaanaDataSet.abaanaCC.Rows[r.RowIndex]["CCImage"];
    MemoryStream stream = new MemoryStream(mydata);           
    this.PpicBox.Image =Image.FromStream(stream);
}
private void abanaccdatagridview\u CellClick(对象发送方,DataGridViewCellEventArgs e)
{
如果(e.RowIndex<0 | | e.ColumnIndex<0)
返回;
this.Ptxtspn_code.Text=this.abanaccdatagridview.Rows[e.RowIndex].Cells[this.dataGridViewTextBoxColumn2.Name].Value.ToString();
字节[]mydata=(字节[])this.abaanaDataSet.abaanac.Rows[r.RowIndex][“CCImage”];
MemoryStream stream=新的MemoryStream(mydata);
this.PpicBox.Image=Image.FromStream(流);
}

注意:

  • CellClick
    事件中,您应该检查单击是否不在行标题或列标题上
  • e.RowIndex
    是单击单元格的行索引,
    e.ColumnIndex
    是单击单元格的列索引
  • 要获取单击行的值,可以使用:
    • yourDGV.Rows[e.RowIndex]。单元格[“GridColumnName”]。值
    • yourDGV.Rows[e.RowIndex]。单元格[2]。值
    • ((DataRowView)yourDGV.Rows[e.RowIndex].DataBoundItem)[2]
    • ((DataRowView)yourDGV.Rows[e.RowIndex].DataBoundItem)[“DataTableColumnName”]
  • 我不知道为什么要在
    CellClick
    中填写abaanaCC,因为您在表单加载事件中加载数据,所以包括CCImage在内的所有值都存在于数据表中。所以我把它拿走了。似乎只有当您希望加载数据而不是在单元格单击中加载数据时,才应该填充它
例如,您的代码可能如下所示:

private void abaanaCCDataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex < 0 || e.ColumnIndex < 0)
        return;

    this.Ptxtspn_code.Text = this.abaanaCCDataGridView.Rows[e.RowIndex].Cells[this.dataGridViewTextBoxColumn2.Name].Value.ToString();       
    byte[] mydata = (byte[])this.abaanaDataSet.abaanaCC.Rows[r.RowIndex]["CCImage"];
    MemoryStream stream = new MemoryStream(mydata);           
    this.PpicBox.Image =Image.FromStream(stream);
}
private void abanaccdatagridview\u CellClick(对象发送方,DataGridViewCellEventArgs e)
{
如果(e.RowIndex<0 | | e.ColumnIndex<0)
返回;
this.Ptxtspn_code.Text=this.abanaccdatagridview.Rows[e.RowIndex].Cells[this.dataGridViewTextBoxColumn2.Name].Value.ToString();
字节[]mydata=(字节[])this.abaanaDataSet.abaanac.Rows[r.RowIndex][“CCImage”];
MemoryStream stream=新的MemoryStream(mydata);
this.PpicBox.Image=Image.FromStream(流);
}
请帮帮我,请帮帮我