Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Datagridview c#和SQL,面向专业开发人员_C#_Sql_Datagridview - Fatal编程技术网

Datagridview c#和SQL,面向专业开发人员

Datagridview c#和SQL,面向专业开发人员,c#,sql,datagridview,C#,Sql,Datagridview,首先,我将简要介绍我的应用程序: C#应用程序使用sql server在团队之间共享“任务” 所有用户都可以看到任务 当用户选中复选框时,会发生此事件 我使用计时器每4秒刷新一次网格 计时器代码: private static int second = 0; private void timer1_Tick(object sender, EventArgs e) { try { second++; List<

首先,我将简要介绍我的应用程序:

  • C#应用程序使用sql server在团队之间共享“任务”
  • 所有用户都可以看到任务
  • 当用户选中复选框时,会发生此事件
  • 我使用计时器每4秒刷新一次网格
  • 计时器代码:

    private static int second = 0;
    
    private void timer1_Tick(object sender, EventArgs e)
    {
            try
            {
                second++;
                List<Tasks> list=taskController.taskController.GetList();
                _FillGridFromList(list);
                _RefreshGrid();
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
    }
    
    /*reFill the grid*/
    private void _RefreshGrid()
    {
            try
            {
                List<Tasks> list = taskController.taskController.GetList();
                _FillGridFromList(list);
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, "Unable to Retrive Data from Server", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
    }
    
    /*This function will fill userGridView from Arraylist that get from SQL */
    private void _FillGridFromList(List<Tasks> list)
    {
            dataGridView1.ClearSelection();
    
            try
            {
                DataTable table1 = new DataTable("sheet");
                System.Data.DataSet tmpSet = new System.Data.DataSet();
                DataRow row = table1.NewRow();
    
                table1.Columns.Add("ID");
                table1.Columns.Add("Title");
                table1.Columns.Add("Description");
                table1.Columns.Add("Preiority");
                table1.Columns.Add("Status");
                table1.Columns.Add("Done By");
                table1.Columns.Add("Start Date");
    
    
                int j = 0;
                for (int i = 0; i < list.Count; i++)
                {
                    Tasks tmp = (Tasks)list[i];
                    row[j++] = tmp.ID;
                    row[j++] = tmp.Name;
                    row[j++] = tmp.Description;
                    row[j++] = tmp.Preiority;
                    row[j++] = tmp.Status;
                    row[j++] = tmp.Done_By;
                    row[j++] = tmp.Start_Date;
    
    
                    j = 0;
                    table1.Rows.Add(row);
                    row = table1.NewRow();
                }
    
                tmpSet.Tables.Add(table1);
                dataGridView1.DataSource = tmpSet.Tables[0];
               // dataGridView1.ReadOnly = true;
                dataGridView1.Columns[1].ReadOnly = true;
                dataGridView1.Columns[2].ReadOnly = true;
                dataGridView1.Columns[3].ReadOnly = true;
                dataGridView1.Columns[4].ReadOnly = true;
                dataGridView1.Columns[5].ReadOnly = true;
                dataGridView1.Columns[6].ReadOnly = true;
                dataGridView1.Columns[7].ReadOnly = true;
    
                for (int i = 0; i < list.Count; i++)
                {
                    if (list[i].Done_By.Trim().Length > 0)
                    {
                        dataGridView1.Rows[i].Cells[0].Value = true;
    
                        if (list[i].Done_By != utility.Util.User.Display_Name)
                        {
                            dataGridView1.Rows[i].Cells[0].ReadOnly = true;
                        }
                        else
                        {
                            dataGridView1.Rows[i].Cells[0].ReadOnly = false;
                        }
                    }
                    else
                    {
                        dataGridView1.Rows[i].Cells[0].Value = false;
                    }
    
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(this, e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
    }
    
    private void dataGridView1_CellValueChanged_1(object sender, DataGridViewCellEventArgs e)
    {
            try
            {
                if(second > 5)
                {
                    foreach (DataGridViewRow dr in dataGridView1.Rows)
                    {
                        DataGridViewCheckBoxCell drx = (DataGridViewCheckBoxCell)dr.Cells[0];
                        if(sender == drx)
    
                        if (drx.Selected != null) //Cells[0] Because in cell 0th cell we have added checkbox
                        {
                            if (drx.Selected==true && dr.Cells[6].Value.ToString() == utility.Util.User.Display_Name)
                            {
                                Tasks tsk = taskController.taskController.Read(dr.Cells[1].Value + "");
                                {
                                    tsk.Done_By = "";
                                    tsk.Status = "";
                                    taskController.taskController.Update(tsk);
                                }
                            }
                            else
                            {
                                if (drx.Selected !=true)
                                {
                                    Tasks tsk = taskController.taskController.Read(dr.Cells[1].Value + "");
    
                                        tsk.Done_By = utility.Util.User.Display_Name;
                                        tsk.Status = "Closed";
                                        taskController.taskController.Update(tsk);
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
    }
    
    private static int second=0;
    私有无效计时器1_刻度(对象发送方,事件参数e)
    {
    尝试
    {
    第二++;
    List List=taskController.taskController.GetList();
    _FillGridFromList(列表);
    _刷新网格();
    }
    捕获(例外情况除外)
    {
    MessageBox.Show(例如消息“Error”、MessageBoxButtons.OK、MessageBoxIcon.Error);
    }
    }
    /*重新填充网格*/
    私有void_RefreshGrid()
    {
    尝试
    {
    List List=taskController.taskController.GetList();
    _FillGridFromList(列表);
    }
    捕获(例外情况除外)
    {
    MessageBox.Show(这是“无法从服务器检索数据”,“错误”,MessageBoxButtons.OK,MessageBoxIcon.Error);
    }
    }
    /*此函数将从从SQL获取的Arraylist填充userGridView*/
    私有void\u FillGridFromList(列表列表)
    {
    dataGridView1.ClearSelection();
    尝试
    {
    DataTable table1=新的DataTable(“表”);
    System.Data.DataSet tmpSet=新的System.Data.DataSet();
    DataRow row=table1.NewRow();
    表1.列。添加(“ID”);
    表1.栏。添加(“标题”);
    表1.列。添加(“说明”);
    表1.列。添加(“优先级”);
    表1.列。添加(“状态”);
    表1.列。添加(“完成人”);
    表1.列。添加(“开始日期”);
    int j=0;
    for(int i=0;i0)
    {
    dataGridView1.Rows[i]。单元格[0]。值=true;
    if(list[i].Done_By!=utility.Util.User.Display_Name)
    {
    dataGridView1.Rows[i]。单元格[0]。只读=true;
    }
    其他的
    {
    dataGridView1.Rows[i]。单元格[0]。只读=false;
    }
    }
    其他的
    {
    dataGridView1.Rows[i]。单元格[0]。值=false;
    }
    }
    }
    捕获(例外e)
    {
    MessageBox.Show(例如消息“Error”,MessageBoxButtons.OK,MessageBoxIcon.Error);
    }
    }
    私有void dataGridView1\u CellValueChanged\u 1(对象发送方,DataGridViewCellEventArgs e)
    {
    尝试
    {
    如果(秒>5)
    {
    foreach(dataGridView1.Rows中的DataGridViewRow dr)
    {
    DataGridViewCheckBoxCell drx=(DataGridViewCheckBoxCell)dr.Cells[0];
    如果(发送方==drx)
    if(drx.Selected!=null)//单元格[0],因为我们在第0个单元格中添加了复选框
    {
    if(drx.Selected==true&&dr.Cells[6].Value.ToString()==utility.Util.User.Display\u Name)
    {
    Tasks tsk=taskController.taskController.Read(dr.Cells[1].Value+“”);
    {
    tsk.Done_By=“”;
    tsk.Status=“”;
    taskController.taskController.Update(tsk);
    }
    }
    其他的
    {
    如果(drx.Selected!=真)
    {
    Tasks tsk=taskController.taskController.Read(dr.Cells[1].Value+“”);
    tsk.Done_By=utility.Util.User.Display_Name;
    tsk.Status=“已关闭”;
    taskController.taskController.Update(tsk);
    }
    }
    }
    }
    }
    }
    捕获(例外情况除外)
    {
    MessageBox.Show(例如消息“Error”、MessageBoxButtons.OK、MessageBoxIcon.Error);
    }
    }
    
    主要问题是,当我再次填充表单时,会调用侦听器,因为我重建了gridview


    我使用以下代码解决问题:

      private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            //MessageBox.Show(e.RowIndex+"   "+e.ColumnIndex);
    
         //   Int32 selectedRowCount = dataGridView1.Rows.GetRowCount(DataGridViewElementStates.Selected);
           // Int32 selectedColumnCount = dataGridView1.Columns.GetColumnCount(DataGridViewElementStates.Selected);
    
            if ( e.ColumnIndex == 0  && e.RowIndex >= 0  )
            {
                string x=dataGridView1.Rows[e.RowIndex-1].Cells[6].Value.ToString();
                if ((bool)dataGridView1.Rows[e.RowIndex-1].Cells[0].Value == false && x!=null )
                {
                    if(x==Util.User.Display_Name)
                    {
                        Tasks tsk = taskController.taskController.Read(dataGridView1.Rows[e.RowIndex-1].Cells[1].Value + "");
                        tsk.Done_By = "";
                        tsk.Status = "";
                        taskController.taskController.Update(tsk);
                        dataGridView1.Rows[0].Cells[1].Value = true;
                    }
                }
                else
                {
                    if ((bool)dataGridView1.Rows[e.RowIndex-1].Cells[0].Value == true)
                    {
                        Tasks tsk = taskController.taskController.Read(dataGridView1.Rows[e.RowIndex-1].Cells[1].Value + "");
    
                        tsk.Done_By = utility.Util.User.Display_Name;
                        tsk.Status = "Closed";
                        taskController.taskController.Update(tsk);
                    }
                }
    
    
            }
        }
    
    我仅从private void dataGridView1\u CellValueChanged\u 1更改侦听器的类型 到
    private void dataGridView1_CellContentClick

    我了解应用程序,但不完全了解您面临的问题。“听众呼叫”是什么意思?你能帮我理解一下吗?除了主要问题外,你的计时器滴答声事件与
    的作用完全相同