sam7one Ответов: 2

изменить цвет определенной строки из GridView в Windows-приложения, разработанные в C#


Я застрял в странной проблеме... У меня есть girdview для отображения биржевых данных. В этих биржевых данных я должен выделить отрицательные биржевые записи желтым цветом.

Я сделал некоторый поиск в google для этого и нашел решение, которое отлично работало, когда я установил эту форму в качестве формы приложения по умолчанию через файл program.cs. Но всякий раз, когда я вызываю форму через Главную форму (т. е. MDI Parent), код для изменения цвета строки не работает. Я отладил код и обнаружил, что программа проходит логику правильно, но не меняет цвет строки.

Ниже приведен код, который я написал...

private void LoadData()
        {
            getLotID_frmLotReport.LotID__frmLotReport = 0; //Table unique ID to fetch records
            string sql = "Select LotID, LotNumber as 'Lot Number', LotName as 'Lot Name', Size_ as Size, convert(varchar(10),LotCreateDate,105) as 'Create Date', round(TotalLotPurchased,2) as 'Lot Purchased', round(TotalLotSold,2) as 'Lot Sold', isnull(round(TotalLotPurchased,2),0)-isnull(round(TotalLotSold,2),0) as 'Total Stock' from dbo.Stock_Lot";
            clsPurchase obj = new clsPurchase(); // Class to execute select query
            DataSet ds = obj.GetData(sql); // function in above class to execute query & get data in dataset
            try
            {
                if (ds.Tables[0].Rows.Count > 0)
                {
                    BindingSource bsource = new BindingSource();

                    DataGridViewLinkColumn dl = new DataGridViewLinkColumn();
                    dl.DataPropertyName = "Lot Number";
                    dl.Name = "Lot Number";
                    dataGridView1.Columns.Add(dl);
                    //this.dataGridView1.Columns["Lot Number"].SortMode = DataGridViewColumnSortMode.Automatic;
                    //this.dataGridView1.Columns["Lot Name"].SortMode=DataGridViewColumnSortMode.NotSortable;
                    bsource.DataSource = ds.Tables[0];
                    dataGridView1.DataSource = bsource;
                    this.dataGridView1.Columns["LotID"].Visible = false;
                    this.dataGridView1.DefaultCellStyle.Font = new Font("Tahoma", 9);
                    this.dataGridView1.ColumnHeadersDefaultCellStyle.Font = new Font("Tahoma", 9);

                   
//***************** NOW BELOW IS THE CODE TO CHANGE COLOR OF SPECIFIC ROWS TO YELLOW ********//
//***************** THIS CODE WORKS IF THIS FORM IS DEFAULT FORM AND NOT INVOKED THROUGH master page **************** //                    
                    string RowIndex = "";
                    string[] RowIndex_arr;
                    
                    clsConnection objConn = new clsConnection();
                    string conn = objConn.ConnDB();
                    string sql1 = "Select isnull(round(TotalLotPurchased,1),0)-isnull(round(TotalLotSold,1),0) as 'Total Stock' from dbo.Stock_Lot";
                    SqlConnection connection = new SqlConnection(conn);
                    connection.Open();
                    SqlCommand cmd = new SqlCommand(sql1, connection);
                    SqlDataReader rd = cmd.ExecuteReader();
                    int i = 0;
                    if (rd.HasRows)
                    {
                        while (rd.Read())
                        {
                            if (Convert.ToDouble(rd["Total Stock"]) <= 0)
                            {
                                RowIndex = RowIndex + i.ToString() + ",";
                            }
                            i = i + 1;
                        }
                    }
                    connection.Close();
                    connection.Dispose();
                    RowIndex = RowIndex.Remove(RowIndex.Length - 1);
                    RowIndex_arr = RowIndex.Split(',');

                    foreach (string s in RowIndex_arr)
                    {
                        if (s != "")
                        {
                                    this.dataGridView1.Rows[Convert.ToInt32(s)].DefaultCellStyle.BackColor = Color.Yellow;
                        }
                    }
                    
                }
                else
                {
                    MessageBox.Show("No Data found!");
                    this.Close();

                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }

        }


Если возможно, попробуйте запустить этот код с вашей стороны, сделав эту форму формой по умолчанию, а также вызвать через Главную страницу, или предоставьте мне другую альтернативу, если вы уже разработали что-то подобное. Пожалуйста, дайте мне знать, если вы ничего не понимаете из моего кода...

Эта задача крайне важна для завершения проекта,и я уже пересек крайний срок. Это функция show Stopper приложения.

Любая помощь будет очень признательна!

Спасибо и с уважением,

СЭМ Д

2 Ответов

Рейтинг:
2

Member 12635235

45452

    }

private void dataGridView1_DataBindingComplete(object sender,DataGridViewBindingCompleteEventArgs e)
    {
        DataGridViewCellStyle myColor= dataGridView1.DefaultCellStyle.Clone();
        myColor.BackColor = Color.Yellow;

            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                if(!row.IsNewRow)
                {


Рейтинг:
14

Pallavi Waikar

добавьте событие DataBindingComplete dataGridView1 для изменения цвета..
чтобы узнать больше о событии DataBindingComplete dataGridView, проверьте следующую ссылку
http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.databindingcomplete.aspx[^]
попробуйте этот код

private void LoadData()
        {
            getLotID_frmLotReport.LotID__frmLotReport = 0; //Table unique ID to fetch records
            string sql = "Select LotID, LotNumber as 'Lot Number', LotName as 'Lot Name', Size_ as Size, convert(varchar(10),LotCreateDate,105) as 'Create Date', round(TotalLotPurchased,2) as 'Lot Purchased', round(TotalLotSold,2) as 'Lot Sold', isnull(round(TotalLotPurchased,2),0)-isnull(round(TotalLotSold,2),0) as 'Total Stock' from dbo.Stock_Lot";
            clsPurchase obj = new clsPurchase(); // Class to execute select query
            DataSet ds = obj.GetData(sql); // function in above class to execute query & get data in dataset
            try
            {
                if (ds.Tables[0].Rows.Count > 0)
                {
                    BindingSource bsource = new BindingSource();

                    DataGridViewLinkColumn dl = new DataGridViewLinkColumn();
                    dl.DataPropertyName = "Lot Number";
                    dl.Name = "Lot Number";
                    dataGridView1.Columns.Add(dl);
                    //this.dataGridView1.Columns["Lot Number"].SortMode = DataGridViewColumnSortMode.Automatic;
                    //this.dataGridView1.Columns["Lot Name"].SortMode=DataGridViewColumnSortMode.NotSortable;
                    bsource.DataSource = ds.Tables[0];
                    dataGridView1.DataSource = bsource;
                    this.dataGridView1.Columns["LotID"].Visible = false;
                    this.dataGridView1.DefaultCellStyle.Font = new Font("Tahoma", 9);
                    this.dataGridView1.ColumnHeadersDefaultCellStyle.Font = new Font("Tahoma", 9);


                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }

        }

	private void dataGridView1_DataBindingComplete(object sender,DataGridViewBindingCompleteEventArgs e)
        {
            DataGridViewCellStyle myColor= dataGridView1.DefaultCellStyle.Clone();
            myColor.BackColor = Color.Yellow;

                foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    if(!row.IsNewRow)
                    {
                        if (row.Cells["Total Stock"].Value.ToString() != "")
                        {
                            row.DefaultCellStyle = myColor;
                        }
                    }
                }
            
        }