Jump to content
TNC-TR
Kastamonolu

C# Excelde Ki Verileri Datagridview'e Kopyalama Da Bekletme

Recommended Posts

C# Excelde ki verileri datagridview'e kopyalama da bekletme

Merhabalar,

Yazdığım bir tane program var bu program excelde kopyaladığımız verileri datagridview'e yapıştırması lazım aşağıda atacağım kod yapıştırıyor ancak 50-100 arasındaki verileri anında ekliyor diğer yani büyük verileri 10000-20000 gibi verileri eklerken program "Yanıt Vermiyor" durumuna düşüyor. Fakat 3-4 dk sonra program düzeliyor ve verileri yapıştırmış oluyor. Bu bekletme olayını neden yapıyor veya nasıl çözebilirim? Bana bir yol önerirmisiniz.

 

 

            try
            {
                IDataObject obj = Clipboard.GetDataObject();
                string s = Clipboard.GetText();
                string[] lines = s.Split('\n');
                int iFail = 0;

                bool headerSelected = false;
                if (dataGridView1.CurrentRow != null)
                {
                    headerSelected = dataGridView1.CurrentRow.Selected;
                }

                int iCol = dataGridView1.ColumnCount - 1, iRow = dataGridView1.RowCount - 1;
                foreach (DataGridViewCell cell in dataGridView1.SelectedCells)
                {
                    if (cell.ColumnIndex < iCol || cell.RowIndex < iRow)
                    {
                        iCol = cell.ColumnIndex;
                        iRow = cell.RowIndex;
                    }
                }

                foreach (string line in lines)
                {
                    if (line.Length > 0)
                    {
                        if (iRow < dataGridView1.RowCount)
                        {
                            string[] sCells = line.Split('\t');
                            int offset = 0;
                            for (int i = 0; (headerSelected ? i + 1 : i) < sCells.GetLength(0); ++i)
                            {
                                if (iCol + i < dataGridView1.ColumnCount)
                                {
                                    while (!dataGridView1[iCol + i + offset, iRow].Visible && iCol + i + offset + 1 < dataGridView1.ColumnCount)
                                    {
                                        offset++;
                                    }
                                    if (dataGridView1[iCol + i + offset, iRow].Visible)
                                    {
                                        try
                                        {
                                            dataGridView1.CurrentCell = dataGridView1[iCol + i + offset, iRow];
                                        }
                                        catch
                                        {
                                            ;
                                        }
                                        if (!dataGridView1.CurrentCell.ReadOnly)
                                        {
                                            string value = headerSelected ? sCells[i + 1] : sCells[i];
                                            if (dataGridView1.CurrentCell.Value == null || dataGridView1.CurrentCell.Value.ToString() != value)
                                            {
                                                dataGridView1.BeginEdit(true);
                                                if (dataGridView1.EditingControl != null)
                                                {
                                                    dataGridView1.EditingControl.Text = value;
                                                }
                                                else
                                                {
                                                    dataGridView1.CurrentCell.Value = Convert.ChangeType(sCells[i], dataGridView1.CurrentCell.ValueType);
                                                }
                                                dataGridView1.NotifyCurrentCellDirty(true);
                                                dataGridView1.EndEdit();
                                            }
                                        }
                                        else
                                        {
                                            iFail++;
                                        }
                                    }
                                    else
                                    {
                                        iFail++;
                                    }
                                }
                            }
                            iRow++;
                        }
                    }
                    else
                    {
                        break;
                    }
                    if (iFail > 0)
                    {
                        MessageBox.Show(string.Format("{0} güncellemeleri " + " yalnızca sütun ayarını okumak için başarısız oldu ", iFail));
                    }
                }
            }
            catch (FormatException)
            {
                MessageBox.Show("Yapıştırdığınız veriler hücrenin yanlış biçimindedir.", "Hata Penceresi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

 

Share this post


Link to post
Share on other sites

1 verinin Exceldeki satırlara yüklenmesi için threading değeri ile 10000-20000 gibi verilerin yüklenmesi bir olabilir mi? Yaptığın işlemin Ram deki tutma oranına göre değişir. Çok yüksek kapasitede Ramlerin varsa 3-4 dk daha aza indirebilirsin. Unutma ki Satır ve Sütun olarak tek tek kopyalıyor excele bir anda kopyalanmıyor.

Büyük projelerde

SQL Server'ın Full-Text Semantic özelliği, 

SQL Full text ve Filter Daemon Launcher i

SQL Server Browser özelliğini Aktif çalışır durumda bırakınız.

 

Ya ilk 100 kaydı listeleyip excele attıracaksın sonra ikinci 100 kaydı excele yollayacaksın. Yada en güzeli CrystalReport üzerinde listeleme yapıp oradan Excele çekmek. 

Edited by hadibeolsun

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×