پاک کردن سطرهای DataGridView بدون حذف نام ستون و ستون از قبل تعیین و تعریف شده

MPERSIA4

Member
درودی دوباره
هر کاری میکنم بعد از پاک کردن سطرهای دیتاگریدویو یا بعد مقدار Null داده به Datagridview.Datesource ، زمانی که دیتاسورس جدیدی به جدول میدم ستونهای اصلی که خودم تعریف کرده بودم پاک میشن و نام ستون هایی که از تو پایگاه داده بارگذاری شده نمایش داده میشن!!!!!!!!!
زیاد گشتم، ولی به جواب نرسیدم:confused:
البته یه راه به ذهنم رسید
اونم اینکه بجای پاک کردن دیتاسورس از جستجو استفاده کنم ولی بازم موقعی که میخوام خودم دستی اطلاعاتی رو تو دیتاگرید نمایش بدم به مشکل میخورم و خطا میده
راه حل چیست؟
با سپاس فراوان
 

the_king

مدیرکل انجمن
درودی دوباره
هر کاری میکنم بعد از پاک کردن سطرهای دیتاگریدویو یا بعد مقدار Null داده به Datagridview.Datesource ، زمانی که دیتاسورس جدیدی به جدول میدم ستونهای اصلی که خودم تعریف کرده بودم پاک میشن و نام ستون هایی که از تو پایگاه داده بارگذاری شده نمایش داده میشن!!!!!!!!!
زیاد گشتم، ولی به جواب نرسیدم:confused:
البته یه راه به ذهنم رسید
اونم اینکه بجای پاک کردن دیتاسورس از جستجو استفاده کنم ولی بازم موقعی که میخوام خودم دستی اطلاعاتی رو تو دیتاگرید نمایش بدم به مشکل میخورم و خطا میده
راه حل چیست؟
با سپاس فراوان
خاصیت DataSource همینه، اگه قراره دخل و تصرفی در اطلاعات DataGridView داشته باشید بهتره که یا از همون ابتدا DataTable سفارشی خودتون رو بسازید و یا اصلا خودتون بصورت دستی سطر ها رو به DataGridView اضافه کنید.
در نظر بگیرید که شما لازم نیست حتما DataSource تون مستقیما از پایگاه داده بیاد، خودتون می توانید از DataTable شیء بسازید و تعداد و نام ستون های دلخواه تان را بهش بدهید و سطر های دلخواه تان را داخلش قرار بدید و نهایتا به عنوان DataSource به DataGridView معرفی کنید. مزیت اصلی استفاده از این DataTable زمانی است که تعداد سطر ها زیاده و اضافه کردن تک تک شون به DataGridView کند خواهد بود، چون با اضافه شدن هر سطر DataGridView نمایش اش رو تجدید می کنه. وگرنه اگه تعداد سطر هایی که نمایش می دهید کمه و مشکل کندی نمایش ندارید متد DataGridView.Rows.Add و DataGridView.Rows.Insert میتونه یک سطر داده رو که مقادیر هر ستون در یک پارامتر جداگانه نوشته میشه رو مستقیما به DataGridView اضافه کنه.
کد:
            var dt = new DataTable();
            dt.Columns.Add("Column1", typeof(string));
            dt.Columns.Add("Column2", typeof(int));
            for (int i = 0; i < 10; i++)
            {
                var row = dt.NewRow();
                row[0] = "test" + (i + 1).ToString();
                row[1] = i + 1;
                dt.Rows.Add(row);
            }
            dataGridView1.DataSource = dt;

کد:
            dataGridView1.Columns.Add("Column1", "Column1");
            dataGridView1.Columns.Add("Column2", "Column2");
            for (int i = 0; i < 10; i++)
            {
                dataGridView1.Rows.Add("test" + (i + 1).ToString(), i + 1);
            }
 

MPERSIA4

Member
تقریبا کاری که گفتید رو انجام دادم
ولی به سیستم قبلی دست نزدم
داخل ی تابع دوباره کل ستونها رو تعریف کردم و مواقع نیاز فراخونیش کردم تا دیتاگرید درست شه
سپاس فراوان
-------------------------------
ی چیز دیگه
شما در مورد کندی سرعت گفتید
من موقع نشون دادن فرمی که فقط توش ی دیتاگرید که شاید حداکثر 10 تا سطر داشته باشه و یکی دو تا Button دارم اون برای گرفتن مقادیر دیتاگرید و بستن فرم ، کندی رو حس میکنم ( فقط موقع نمایش فرم)
چطور میتونم این کندی رو برطرف کنم؟
اینم کد دیتاسورسی که از پایگاه داده میگیرم
کد:
SqlDataAdapter daC = new SqlDataAdapter("SaleInvoicesShow", SCon);
                daC.SelectCommand.CommandType = CommandType.StoredProcedure;
                daC.SelectCommand.Parameters.AddWithValue("CId", CID);
                DataTable dtC = new DataTable();
                daC.Fill(dtC);
                dtGrdCustomerInvoices.DataSource = dtC;
                for (int j = 1; j <= dtGrdCustomerInvoices.Rows.Count; j++)
                {
                    dtGrdCustomerInvoices.Rows[j - 1].Cells["CR"].Value = j;
                }
                try
                {
                    dtGrdCustomerInvoices.Sort(dtGrdCustomerInvoices.Columns["CR"], ListSortDirection.Ascending);
                }
                catch
                { }
                dtGrdCustomerInvoices.BringToFront();
و این هم کوئری
کد:
ALTER proc [dbo].[SaleInvoicesShow]
@CId int
as
select * from SaleInvoices where CId=@CId

مشکل کجاست؟ چطور میتونه سریعتر عمل کنه ؟
 

the_king

مدیرکل انجمن
تقریبا کاری که گفتید رو انجام دادم
ولی به سیستم قبلی دست نزدم
داخل ی تابع دوباره کل ستونها رو تعریف کردم و مواقع نیاز فراخونیش کردم تا دیتاگرید درست شه
سپاس فراوان
-------------------------------
ی چیز دیگه
شما در مورد کندی سرعت گفتید
من موقع نشون دادن فرمی که فقط توش ی دیتاگرید که شاید حداکثر 10 تا سطر داشته باشه و یکی دو تا Button دارم اون برای گرفتن مقادیر دیتاگرید و بستن فرم ، کندی رو حس میکنم ( فقط موقع نمایش فرم)
چطور میتونم این کندی رو برطرف کنم؟
اینم کد دیتاسورسی که از پایگاه داده میگیرم
کد:
SqlDataAdapter daC = new SqlDataAdapter("SaleInvoicesShow", SCon);
                daC.SelectCommand.CommandType = CommandType.StoredProcedure;
                daC.SelectCommand.Parameters.AddWithValue("CId", CID);
                DataTable dtC = new DataTable();
                daC.Fill(dtC);
                dtGrdCustomerInvoices.DataSource = dtC;
                for (int j = 1; j <= dtGrdCustomerInvoices.Rows.Count; j++)
                {
                    dtGrdCustomerInvoices.Rows[j - 1].Cells["CR"].Value = j;
                }
                try
                {
                    dtGrdCustomerInvoices.Sort(dtGrdCustomerInvoices.Columns["CR"], ListSortDirection.Ascending);
                }
                catch
                { }
                dtGrdCustomerInvoices.BringToFront();
و این هم کوئری
کد:
ALTER proc [dbo].[SaleInvoicesShow]
@CId int
as
select * from SaleInvoices where CId=@CId

مشکل کجاست؟ چطور میتونه سریعتر عمل کنه ؟
اینکه موقع نمایش فرم کند باشه الزاما از DataGridView یا ارتباط SQL تون نیست، ممکنه از سنگینی کنترل هایی باشه که رویش قرار می دهید. کد هایی که موقع فراخوانی یا نمایش فرم تون دارید رو موقتا با // بصورت comment out کنید تا اجرا نشوند و اینطوری بیینید کدوم بخش از کد تون دلیل اصلی کند کردن ئه. در ضمن تا حد امکان Sort کردن رو در کوئری تون انجام بدید، نه با DataGridView. البته مرتب کردن 10 سطر نباید دلیل کندی باشه. شما می توانید اون حلقه ای که شماره سطر رو به ستون CR می دهید در dtC انجام بدید تا دیگه DataGridView فقط یکباره نمایش اش بروز بشه، نه برای هر تک تک شماره دادن ها.
کد:
            DataTable dtC = new DataTable();
            daC.Fill(dtC);
            for (int j = 1; j <= dtC.Rows.Count; j++)
            {
                dtC.Rows[j - 1]["CR"] = j;
            }
            dtGrdCustomerInvoices.DataSource = dtC;
اگه بعد از این تغییرات و آزمایش ها به این نتیجه رسیدید که کند شدن از همون کد های SQL و نمایش DataGridView است، می توانید از بخش فراخوانی و نمایش فرم منتقل شون کنید به یک BackgroundWorker که بعد از نمایش فرم اجرا بشه، اینطوری همچنان همون زمان صرف اش میشه ولی نمایش فرم به سرعت صورت می گیره و کاربر میتونه فرضا با ساعت شنی و یک ProgressBar منتظر پایان عملیات باشه.
 

جدیدترین ارسال ها

بالا