Datagridview列过滤器

dualshck012

成员
已加入
一月14,2018
留言内容
14
编程经验
1-3
我有一个带有4列的databind datagridview,除了第一列是在控件中为符号/颜色行添加的列。第一列将是过滤器标志,指示活动或不活动的用户(医生)。第二列是数据库中的数据绑定列,其值为0或1(不活动或活动)。如果值为0,则第1个datagridview列将指示相应的不活动图像/红色行,否则,如果值为1,则将指示相应的活动图像/绿色行。我这里有一个最新的C#代码,但对我的控件没有任何作用。

C#:
private void dg_vw_actve_doc_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex == 1 && !isInit)
            {
                var valueCell = dg_vw_actve_doc.Rows[e.RowIndex].Cells[e.ColumnIndex];
                var imgCell = dg_vw_actve_doc.Rows[e.RowIndex].Cells[e.ColumnIndex + 1]; // Whatever index your colImg is
                                                                                         // char firstCharacterInCell = valueCell.Value.ToString()[1];
                                                                                         //if (firstCharacterInCell == 'A')
                if (int.Parse(valueCell.Value.ToString()) == 1)
                    imgCell.Value = Properties.Resources.active;
                else
                    imgCell.Value = Properties.Resources.inactive;
            }
        }

我的Datagriview加载事件:
C#:
private void LOAD_ACTIVE_DOCTORS()
        {

            try
            {
                mysqlconstring.conn.Open();
                string query301 = "SELECT hprovider.chatactv, CONCAT(hpersonal.firstname, '  ', hpersonal.lastname) AS 'Doctors', accno as 'Accreditation' FROM hpersonal INNER JOIN hprovider ON  hpersonal.employeeid=hprovider.employeeid WHERE  hprovider.licno LIKE 'MD%'";
                mysqlconstring.cmd = mysqlconstring.conn.CreateCommand();
                mysqlconstring.cmd.CommandType = CommandType.Text;
                mysqlconstring.cmd.CommandText = query301;
                mysqlconstring.adapt.SelectCommand = mysqlconstring.cmd;
                DataSet dtSet = new DataSet();
                mysqlconstring.adapt.Fill(dtSet);
                dg_vw_actve_doc.DataSource = dtSet.Tables[0].DefaultView;
                // to hide unbound column
                if (dg_vw_actve_doc.Columns.Count != 0)
                {
                    dg_vw_actve_doc.Columns[1].Visible = true;
                }
}
            catch (MySqlException err01)
            {
                MessageBox.Show(err01.ToString(), "Their is an Error in the Database connection. Please contact your SH System Administrator", MessageBoxButtons.OK, MessageBoxIcon.Error);
                throw;
            }
            finally
            {
                if (mysqlconstring.conn.State == ConnectionState.Open)
                {
                    mysqlconstring.conn.Close();
                }
            }
        

        }
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,534
地点
悉尼,澳大利亚
编程经验
10+
Firstly, there's no point creating a DataSet if all you need is a DataTable and there's no point binding the DefaultView because that's where the data comes from when you when you bind the DataTable. Create a DataTable, bind that to a BindingSource, which you would add in the designer, and bind that to the grid. If you need to sort or filter, use the Sort and Filter properties of the BindingSource.
 

dualshck012

成员
已加入
一月14,2018
留言内容
14
编程经验
1-3
现在都可以使用了,但是我如何才能在
“专用无效dg_vw_actve_doc_CellValueChanged(对象发送者,DataGridViewCellEventArgs e)”单击按钮?它仅在单元格中的值编辑期间有效。查看截图。
 

附件

  • test.png
    test.png
    170.2 KB · Views: 41

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,539
地点
弗吉尼亚州切萨皮克
编程经验
10+
单元格值更改事件处理程序中的代码仅取决于事件参数行和列索引值。此外,只有在第1列发生更改时,才能完成实际工作。那么,为什么不将事件处理程序中的代码移到带有行号的辅助方法中呢?用伪代码:
C#:
SetImage(int row)
{
    // most of the your code to set the image from your OP
}

CellValueChangedEvent(..., e)
{
    if (e.ColumnIndex == 1 && !isInit)
        SetImage(e.RowIndex)
}

ButtonClickEvent()
{
    rowNumber = some criteria that you failed to tell us about
    SetImage(rowNumber)
}
 
最佳 底部