PDA

View Full Version : سوال: تغییر مکان یه مقدار در Combox



mhsmity
چهارشنبه 08 خرداد 1392, 20:26 عصر
با سلام .
چگونه مقدار خالی رو از سطر سوم به سطر اول انتقال دهم به طوری که همین ترتیب حفظ شود.
اگه امکان داره به دور روش زیر بنده رو راهنمایی کنید.
1- کد نویسی در فرم لود برنامه.
2- دستورات واکشی اطلاعات از بانک .

SELECT Count, name
FROM sortzonecount
ORDER BY Count DESC, name DESC


مسلئه را سخت نکرده باشم.
طبق تصویری که برای شما عزیزان گذاشتم فقط می خوام مقدار خالی به سطر اول انتقال پیدا کنه.

ممنون دوستان

mhsmity
پنج شنبه 09 خرداد 1392, 12:10 عصر
از دوستان محلی بزارین مرحمتی کنید!!!!!

hamid_hr
پنج شنبه 09 خرداد 1392, 12:53 عصر
خب remove كن بعد بيا به اول ايتمهاي combobox لونو insert كن
cmb.items.removeat(2);
cmb.items.insert(0,"");

mhsmity
پنج شنبه 09 خرداد 1392, 13:43 عصر
خب remove كن بعد بيا به اول ايتمهاي combobox لونو insert كن
cmb.items.removeat(2);
cmb.items.insert(0,"");
از توجه شما ممنون ولی به ازای هر بار اجرا معلوم نیست که مقدار خالی کجا باشه پس یک حلقه جستجو می خواد.
خدایش سوال رو خیلی ناقص پرسیدم.
ولی این تابع رو براتون می زام

این تابع دو تا دیتا تیل رو می گیره و این دو رو باهم ادغام می کنه. به این صورت که آیتم های پرکاربرد را در ابتدای مممم و بقیه فیلدها رو بدونه حالت تکراری قرار می دهد.
void filllist(ComboBox Cbx,DataTable sortCount,DataTable allname)
{
List<string> l = new List<string>();
l.Add("");
DataTable dt1 = new DataTable();
dt1 = sortCount;

foreach (DataRow r in dt1.Rows)
{
string str = r["name"].ToString();
if (str != "")
l.Add(str);
}
DataTable dt2 = new DataTable();
dt2 = allname;
foreach (DataRow r2 in dt2.Rows)
{
bool isfind = false;
string str2 = r2["name"].ToString();
foreach (DataRow r1 in dt1.Rows)
{
string str1 = r1["name"].ToString();
if (str2 == str1)
isfind = true;
}
if (!isfind)
l.Add(str2);
}
List<string> l2 = new List<string>();
foreach (string str in l.ToArray().Distinct())
{
l2.Add(str);
}
Cbx.DataSource = l2;
}

hamid_hr
پنج شنبه 09 خرداد 1392, 14:43 عصر
خب وقتي داري ميريزت داخلl2 چك كن اگه برابر "" بود ثبت نكن فقط يه متغير بزار بشماره ببينه چند تاس در اخر با يك for به تعداد اون متغيير اونا رو درج كن

Mahmoud.Afrad
پنج شنبه 09 خرداد 1392, 17:19 عصر
اون دو تا دیتاتیبل چجوری پر میشن. فکر کنم همه اینکارهارو بتونی سمت sql موقع دریافت اطلاعات انجام بدی نیازی به این همه کد نیست.
کوئری هایی که اطلاعات رو واکشی میکنی بزار و بگو چه خروجی مد نظرت هست.

mhsmity
پنج شنبه 09 خرداد 1392, 17:49 عصر
اون دو تا دیتاتیبل چجوری پر میشن. فکر کنم همه اینکارهارو بتونی سمت sql موقع دریافت اطلاعات انجام بدی نیازی به این همه کد نیست.
کوئری هایی که اطلاعات رو واکشی میکنی بزار و بگو چه خروجی مد نظرت هست.
دوست عزیز فکر نکنم سمت Sql بشه این خروجی رو به صورت یکجا داشته باشیم.

بر اساس تعداد درج باید ترتیب قرارگیری آیتم هادر Combox مشخص شود.
دیتاتیبا اول این کار را انجام می دهد.
SELECT TOP (100) PERCENT COUNT(*) AS Count, dbo.tblzone.name
FROM dbo.tblmain INNER JOIN
dbo.tblzone ON dbo.tblmain.idzone = dbo.tblzone.id
WHERE (dbo.tblmain.membership = 1)
GROUP BY dbo.tblzone.name
ORDER BY Count DESC, dbo.tblzone.name DESC

خوب دیتاتیبل دوم نام تمام حوزهای موجود رو بگرمی گردونه.
SELECT name
FROM tbltasilat
WHERE (name <> '') AND (name <> N'ندارد')
ORDER BY name

حالا ما یک لیست درست کرده مقدار اول این عنصر "" می زاریم
بعد دیتا تیبل اول رو اضافه می کنیم.
بعد دیتاتیبل دوم را با حذف تکراری ها به لیست اضافه می کنیم.

خوب کلیت کار اومد دستتون.
اگه میشه، این همه کار رو به یک باره سمت sql انجام داد آموزش بیدن ممنون

Mahmoud.Afrad
پنج شنبه 09 خرداد 1392, 18:34 عصر
ای کاش ساختار جداولتون رو هم میذاشتید.
اینو امتحان کنید:

with t_cte
as
(
SELECT TOP (100) PERCENT COUNT(*) AS Count,
dbo.tblzone.name
FROM dbo.tblmain
INNER JOIN
dbo.tblzone
ON dbo.tblmain.idzone = dbo.tblzone.id
WHERE dbo.tblmain.membership = 1
GROUP BY dbo.tblzone.name
ORDER BY Count DESC, dbo.tblzone.name DESC
)
SELECT name
FROM t_cte
UNION
SELECT name
FROM tbltasilat
WHERE name <> '' AND name <> N'ندارد'
ORDER BY name

mhsmity
جمعه 10 خرداد 1392, 15:09 عصر
ای کاش ساختار جداولتون رو هم میذاشتید.
اینو امتحان کنید:

سلام کدهای شما خروجی تصویر شماره یک روداشت
مقادیر نام حوزه ها رو داخل تصویر شماره دو گذاشتم در جدول اصلی
خروجی مورد نظر خودم هم داخل تصویر شماره سه

خوب اگه دقت کنید کدها شما خروجی مورد نظر ور نداره اگه براتون امکان داره می تونید اصلاحش کنید دقیقا همین خروجی رو داشته باشه مثل combox سمت چپ
ممنون
درزم کدها یکم اشکال داشت که اصلاح شد
WITH t_cte AS (SELECT TOP (100) PERCENT COUNT(*) AS Count, tblzone.name
FROM tblmain INNER JOIN
tblzone ON tblmain.idzone = tblzone.id
WHERE (tblmain.membership = 1)
GROUP BY tblzone.name
ORDER BY Count DESC, tblzone.name DESC)
SELECT name
FROM t_cte AS t_cte_1
UNION
SELECT name
FROM tblzone AS tblzone_1
WHERE (name <> '') AND (name <> N'ندارد')

Mahmoud.Afrad
جمعه 10 خرداد 1392, 21:24 عصر
منظورت مرتب سازیه؟
تست کردم union نتیجه رو مرتب میکنه.

mhsmity
جمعه 10 خرداد 1392, 23:25 عصر
[QUOTE=Mahmoud.Afrad;1782156]منظورت مرتب سازیه؟
تست کردم union نتیجه رو مرتب میکنه.

نه.
سورت باید براساس تعداد استفاده از نام حوزه باشد.
حوزه 7 روح الله دو بار تکرار شده در مکان دوم قرار می گیرد بعد از " "
حوزه 2 فتح دو بار تکرار شده در مکان سوم
حوزه 1 حزب الله یک بار تکرار شده در مکان چهارم
حال بقیه نام حوزه ها به صورت مرتب شده اضافه بشن. در مکان الی آخر

فکر نکنم بشه دستوراتی نوشت که در سمت Sql به یک بار اجرا بشه. درسته؟

Mahmoud.Afrad
جمعه 10 خرداد 1392, 23:50 عصر
اگر تعداد بعد از اجتماع رو میخوای میتونی هر دو سلکت رو union all کنی و بعد بر حسب تعداد مرتب کنی. top(100) percent هم یعنی صد در صد رکوردها پس اضافه هست میتونی حذفش کنی.

WITH t_cte
AS
(
SELECT tblzone.name
FROM tblmain INNER JOIN
tblzone ON tblmain.idzone = tblzone.id
WHERE tblmain.membership = 1

UNION ALL

SELECT name
FROM tblzone AS tblzone_1
WHERE (name <> '') AND (name <> N'ندارد')
)
SELECT name
FROM t_cte
GROUP BY name
ORDER BY COUNT(name) DESC , name DESC