0

従業員名と出席と呼ばれるチェックボックスの2つの列のみを表示するDataGridViewがあります。これは、安全会議への従業員の出席を追跡するためです。

このDGVをロードするとき、すでに出席済みとしてマークされている従業員には、それぞれのチェックボックスにチェックマークを付けてほしいと思います。

これは私が試したものですが、すべてのボックスをチェックするだけです。

private void LoadEmpAttendanceDGV()
{
    string sqlstm = "SELECT EmpID, EmpName FROM dbo.MY_TABLE";
    // Additional code here, which loads the grid.

    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
    {
        myKey.empID = tempEmpID;
        myKey.trainingID = tempTrainingID;
        myRow = trainingSession.Read(myKey);

        // Check to see if record exists, meaning employee attended meeting.
        if (myRow != null)
        {
            for (int j=0; j < ds.Tables[0].Rows.Count; j++)
            {
                myDataGridView["Attended", j].Value = true;
                // Where "Attended" is the name of my CheckBox column
            }
        }
    }
}

誰かが何か洞察を提供できれば、私はそれを大いに感謝します。

4

4 に答える 4

1

このようなテーブルを作成する

SqlServerコード

USE [acc]
GO

CREATE TABLE [dbo].[EmpAttendedTheMeeting](
    [EName] [varchar](50) NOT NULL
) ON [PRIMARY]

GO

CREATE TABLE [dbo].[Employees](
    [EName] [varchar](50) NOT NULL
) ON [PRIMARY]

GO
insert into Employees(EName) values('kashif')
insert into Employees(EName) values('sunny')
insert into Employees(EName) values('kamran')

insert into EmpAttendedTheMeeting(EName) values('kashif')
insert into EmpAttendedTheMeeting(EName) values('kamran')

c#コード

namespace WindowsFormsApplication9
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        DataGridViewTextBoxColumn tb = new DataGridViewTextBoxColumn();
        DataGridViewCheckBoxColumn cb = new DataGridViewCheckBoxColumn();
        private void Form1_Load(object sender, EventArgs e)
        {
            FormatGrid(dataGridView1);
            LoadDg();
        }
        private void FormatGrid(DataGridView dg)
        {
            dg.Columns.Add(tb);
            dg.Columns[0].HeaderText = "EName";
            dg.Columns[0].Width = 199;

            dg.Columns.Add(cb);
            dg.Columns[1].HeaderText = "Attended";
            dg.Columns[1].Width = 69;            
        }
        private void LoadDg()
        {
            SqlConnection cn = new SqlConnection("data source=localhost;initial catalog=acc;uid=sa;pwd=emotions");                
            SqlDataAdapter da = new SqlDataAdapter("select Employees.EName, EmpAttendedTheMeeting.EName from Employees left join EmpAttendedTheMeeting on Employees.EName = EmpAttendedTheMeeting.EName", cn);
            DataTable dt = new DataTable();
            da.Fill(dt);
            foreach (DataRow dr in dt.Rows)
            {           
                dataGridView1.Rows.Add(dr[0], dr[1].ToString() == string.Empty ? false : true);
            }
        }   

    }
}

このようなグリッドビューで結果を取得しています。晴れはEmpAttentendedTheMeetingにないため、彼の名前はチェックされていません

グリッドビュー

于 2013-02-22T23:13:25.700 に答える
0

値を設定した下部近くの行でjをiに変更してみてください

于 2013-02-22T20:03:10.907 に答える
0

元のSQLでレコードの存在をキャッチするのはどうですか?何かのようなもの

SELECT EmpID、EmpName、isnull(attended、0)FROMdbo.MY_TABLEm左外部結合がaonm.EmpID=a.EmpIDに参加しました

于 2013-02-22T20:34:40.740 に答える
0

私が間違っていても許してください、しかしコードのこのセクション:

        for (int j=0; j < ds.Tables[0].Rows.Count; j++)
        {
            myDataGridView["Attended", j].Value = true;
            // Where "Attended" is the name of my CheckBox column
        }

確かにすべての行をtrueに設定しますね。特定の行をtrueに設定したいだけです。

于 2013-02-22T23:34:40.980 に答える