1

DataGridView があるプログラムを作成しています。この GridView は、SQL 接続を介して 1 つのテーブルからデータを取得します。このテーブルには 1 列といくつかの行があります。

行ごとに、ボタンのある別の列があります。ボタンをクリックすると、別のフォームが開き、クリックした行にファイルの名前が表示されます。

残念ながら、プログラムはフォームを開きますが、テーブルの最初のセルを表示します。これは、Form2 が Form1 から取得する必要がある e.RowIndex 番号を通知されないため、表示する行を認識できるためです。したがって、どのボタンをクリックしても、セル番号1を参照するe.RowIndex番号0が必要であると想定しています。

それでは、質問に進みます。chartRowNumber が 0 であると想定する前に、chartRowNumber を更新するにはどうすればよいですか?

フォーム 1:

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.Data.Sql;
using System.Threading;

namespace WindowsFormsApplication5
{
    public partial class Form1 : Form
    {![enter image description here][1]
    DataTable userTable = new DataTable();
    DataGridViewButtonColumn checkMeasurement = new DataGridViewButtonColumn();
    public DataSet ds = new DataSet();
    private SqlConnection con = new SqlConnection(@"Data Source=irrelevant");
    public Form1()
    {
        InitializeComponent();
        con.Open();
        SqlCommand cmd = new SqlCommand("SELECT BlobFilename FROM tblUsers", con);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(ds);
        checkMeasurement.HeaderText = "Se Måling";
        checkMeasurement.Text = "";
        checkMeasurement.UseColumnTextForButtonValue = true;
        dataGridView1.DataSource = ds.Tables[0];
        dataGridView1.Columns.Add(checkMeasurement);
    }

    public void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        if (e.ColumnIndex == 0)
        {
            Form2 f = new Form2();
            f.chartRowNumber = e.RowIndex;
            Thread.Sleep(1000);
            f.Show();
        }
    }
}

}

フォーム2

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;

namespace WindowsFormsApplication5
{
    public partial class Form2 : Form
    {
        public int chartRowNumber;
        public Form2()
        {
            InitializeComponent();
            Form1 f = new Form1();
            DataTable PatientTable = f.ds.Tables[0];
            listBox1.Items.Add(PatientTable.Rows[chartRowNumber].ItemArray[0].ToString());
        }
    }
}

興味のある方は、GUI の写真をご覧ください。 http://i.stack.imgur.com/PDyFt.png

4

2 に答える 2