PDA

View Full Version : سوال در مورد سورت کردن شماره های سند؟



نیما حتمی
چهارشنبه 18 خرداد 1390, 08:41 صبح
با سلام
من برنامه حسابداری نوشتم که کاربر در آن سند می زنه به تاریخ روز.حالا وقتی کاربر سند زد یک شماره سند براش ایجاد میشه که این شماره رو سیستم تولید میکنه و دست کاربر نیست.در مواردی پیش میاد که به کاربر ثبت سند، سندهای 10 رو یا .... قبل رو میدن کاربر باید اسناد رو به همون تاریخی که اسناد هستن بزنه یعنی اگر اسناد 10 رو قبل رو میدن باید به تاریخ 10 روز قبل این اسناد رو بزنه.حالا وقتی کاربر میادو این کارو میکنه شماره سندی که زده میشه ادامه آخرین شماره سند زده شده است(مثلا فرض کنید تا امروز تا 100 رفته حالا امروز اسناد 10 رو قبل رو میاد می زنه میشه 101و.....)در این سیستم شماره اسناد باید براساس تاریخ مرتب بشن (تاریخ عقبتر شماره سند کوچکتر) من برای این کار فرمی طراحی کردم که میاد این کارو میکنه ولی مشکل اینجاست که به ازای هر سطر که میخواد مرتب کنه باید یک بار دکمه مرتب سازی رو بزنه کاربر اینم کدم:


for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
if ((Convert.ToInt32(dataGridView1.Rows[i].Cells[1].Value) > Convert.ToInt32(dataGridView1.Rows[i + 1].Cells[1].Value)) || (Convert.ToInt32(dataGridView1.Rows[i].Cells[3].Value.ToString().Replace("/", "")) > Convert.ToInt32(dataGridView1.Rows[i + 1].Cells[3].Value.ToString().Replace("/", ""))))
{

int temp = Convert.ToInt32(dataGridView1.Rows[i].Cells[1].Value);
dataGridView1.Rows[i].Cells[1].Value = Convert.ToInt32(dataGridView1.Rows[i + 1].Cells[1].Value);
dataGridView1.Rows[i + 1].Cells[1].Value = temp;

}

}

for (int j = 0; j < dataGridView1.Rows.Count; j++)
{
SqlDataAdapter u = new SqlDataAdapter("update EmissionDocView set NumReceipt='" + dataGridView1.Rows[j].Cells[1].Value + "' where AtfDoc='" + dataGridView1.Rows[j].Cells[2].Value + "'and DateDoc='" + dataGridView1.Rows[j].Cells[3].Value + "'", connect);
DataTable u1 = new DataTable();
u.Fill(u1);

}
دوستان کمک کنید که خیلی گیرم
ممنونم

یوسف زالی
چهارشنبه 18 خرداد 1390, 08:52 صبح
سلام.
برای این کار تو SQL یک SP بنویسید هم خیلی سریعتره هم خیلی ساده تر.

نیما حتمی
چهارشنبه 18 خرداد 1390, 09:24 صبح
میشه بگین چطوری؟

ma.rad
چهارشنبه 18 خرداد 1390, 09:49 صبح
خوب دوست عزیز براساس همون شماره جد ول صورت کن این مال دیتا گرید

dataGridView1.Sort(dataGridView1.Columns[0], ListSortDirection.Descending);

برای فیلدلی دیتابیس هم دستور sort بنویس..

یوسف زالی
چهارشنبه 18 خرداد 1390, 09:52 صبح
خب باید جداول رو داشته باشم.
اما به صورت عمومی یه SP بنویسید که مثلا بر اساس تاریخ سلکتی رو انجام بده و سورت کنه.
سپس بیاد ردیفهایی که می خواهید رو Update کنه.
امیدوارم این کمکت کنه:


declare @T1 table(SN int, A int)
declare @x int
declare @i int
insert into @T1
values (1, 2),(8, 11),(2, 3),(5, 8),(3, 19)

set @x = 0
set @i = 0
while @x >= 0
begin
set @i = @i +1

set @x =(select top 1 SN from @T1 where A > 0 order by SN)

update @T1
set A =-@i
where SN = @x
end
update @T1
set A =-A
select*
from @T1

نیما حتمی
چهارشنبه 18 خرداد 1390, 10:00 صبح
والا من سر در نیاوردم از این کد.اولا من insert نیاز ندارم داده ها در جدول هست فقط باید مرتب و در آخر مرتب شده شماره اسناد update بشن.ببین دوست عزیز من خیلی کارم گیره این موضوعه اگه ممکنه بهم کمک کنید

یوسف زالی
چهارشنبه 18 خرداد 1390, 10:05 صبح
عزیز جان من چون داده هاتون رو نداشتم Insert کردم که جدول مثالم داده داشته باشه.
شما جدول خودتو بذار جاش.
اسم ها رو هم طبق نیازت عوض کن.

نیما حتمی
چهارشنبه 18 خرداد 1390, 10:20 صبح
اون SNچیه؟میشه یه توضیه در مورد متغیر هایی که تعریف کردی بدی و بگی این برنامه کلا چیکار میکنه؟شرمنده دادا میدونم اذیت میشی ولی یه کمکی کنه جای دور نمی ره.ممنونم

یوسف زالی
چهارشنبه 18 خرداد 1390, 10:32 صبح
SN فیلد کلید اصلی شماست درجدول.
برنامه شامل یک حلقه هست که تک تک داده هارو طبق سورت اعمال شده میاره و مقدار i رو جاش می ذاره.
منفی میذاریم تا تشخیص بدیم این داده دیگه آپدیت نشه.
آخر هم منفی هارو درست می کنیم.

نیما حتمی
چهارشنبه 18 خرداد 1390, 12:04 عصر
با تشکر از پاسخ شما.ولی این کد مشکل منو حل نکرد از دوستان کسی هست بتونه کمکی کنه؟

نیما حتمی
شنبه 21 خرداد 1390, 08:35 صبح
دوستان محترم اساتید گرامی لطفا به داد من برسین .این کدی که من نوشتم و در تایپیک اول قرار دادم درسته فقط مشکلش اینه که به ازای هر سطری که باید سورت بشه باید 1 بار دکمه سورت رو بزنیم.یعنی اگر 100 سطر باشه که نیاز به سورت و آپدیت داشته باشه باید کاربر 100 بار دکمه سورت رو یزنه در صورتی که من میخوام 1بار دکمه مورد نظر زده بشه و کل گربد همزماه سورت و آپدیت بشه در بانم.
ممنونم.خیلی کارم گیره