PDA

View Full Version : خواندن اطلاعات هر رديف ديتاگريد ازچندرديف در بانك اطلاعاتي



hsadeh
شنبه 22 خرداد 1389, 07:11 صبح
سلام - با توجه به تصوير ضميمه چطوري ميتونم ديتاگريد را از جدول بانك اطلاعاتي پر كنم ؟ توضيح اينكه در جدول بانك اطلاعاتي براي هر تاريخ چند رديف اطلاعات دارم كه ميخواهم در ديتاگريد ، هرتاريخ بصورت يك رديف نمايش داده شود . خواهشمند است نمونه كد ارايه فرماييد - محيط برنامه نويسي vb.net 2003

ali_zzr
شنبه 22 خرداد 1389, 13:18 عصر
ببین راهی که به نظر من میرسه اینه که اطلاعات رو بگیری از دیتابیس با یک پروسه ای بریزی توی یک datatable که جدولی که میخوای رو بدست بیاری.

hsadeh
شنبه 22 خرداد 1389, 13:36 عصر
سلام - باتوجه به تصوير ، ميشه زحمت بكشي نمونه كد بنويسي؟

hamedsabzian
شنبه 22 خرداد 1389, 13:48 عصر
اگه همیشه برای همه ی سطرهای Grid نهایی تعداد ستون ها برابر باشه، راهی که دوستمون گفتن خوبه!
در غیر این صورت بهتره از دو Grid استفاده بشه، یکی تاریخا رو نمایش بده و دیگری بر اساس تاریخ انتخاب شده بقیه مقادیر.

ali_zzr
شنبه 22 خرداد 1389, 14:23 عصر
ببین من یک کد SQL هم برات نوشتم.البته شاید بهتر از این هم بشه نوشت ولی این کاری که میخوای رو میکنه
در واقع یک stored procedure هست.ولی همین جوری هم میتونی استفاده کنی :



go
create proc Proce_name
as
declare @date1 nvarchar(50)
declare @var1 int
declare @var2 int
declare @var3 int
declare @var4 int
declare @var5 int
declare @var6 int
declare @var7 int
declare @var8 int
declare @var9 int
DECLARE @MyTableVar table(
[date] nvarchar(50) NOT NULL,
n1 int,
n2 int,
n3 int,
n4 int,
n5 int,
n6 int,
n7 int,
n8 int,
n9 int
);
declare cursor_1 scroll cursor for
select [date_field_name] from [Table_name] group by [date_field_name]
OPEN cursor_1
declare @no int
set @no = @@CURSOR_ROWS
while @no >0
BEGIN
FETCH ABSOLUTE @NO FROM cursor_1 INTO @date1
declare cursor_2 scroll cursor for
select [field1], [field2], [field3] from [Table_name] where [date_field_name] = @date1
OPEN cursor_2
fetch next from cursor_2 into @var1,@var2,@var3
fetch next from cursor_2 into @var4,@var5,@var6
fetch next from cursor_2 into @var7,@var8,@var9
insert into @MyTableVar ([date],n1,n2,n3,n4,n5,n6,n7,n8,n9)
values
(@date1,@var1,@var2,@var3,@var4,@var5,@var6,@var7, @var8,@var9)
set @no = @no -1
DEALLOCATE cursor_2
END
DEALLOCATE cursor_1
select * from @MyTableVar

که یکسری نامها رو باید تغییر بدی. (اونهایی که کروشه هستند و بینشون کلماتشون _ هست)

البته من این کد رو برای تبدیل این ساختار ( 4 ستون و هر چند تعداد ردیف) به ساختار ( 10 ستون و هر چند تعداد ردیف ) نوشته ام.اگه ساختارت فرق کنه این کد فرق نمی کنه

hsadeh
شنبه 22 خرداد 1389, 15:49 عصر
بابت جوابتون خيلي ممنون هستم - كدي كه نوشتي را چطوري تو محيط vb.net بنويسم ؟
ميشه كد vb.net را هم بنويسي ؟ سپاسگذارم

ali_zzr
شنبه 22 خرداد 1389, 17:48 عصر
من کد sql برات نوشتم.اگه همین store procedure رو اجرا کنی خیلی برای خودت و سرور بهتره

hsadeh
دوشنبه 24 خرداد 1389, 07:26 صبح
سلام- store procedure كه نوشتي را چطوري تو محيط vb.net استفاده كنم ؟

ali_zzr
دوشنبه 24 خرداد 1389, 10:05 صبح
از این توی محیط vb.net استفاده نمیکنند.
توی محیط sqlserver استفاده میکنند
شما این کد رو با تغییراتش رو کپی کن توی یک query توی sqlserver بعد اجراش کن.
یک storedProcedure ایجاد میشه که میتونی ازش تو vb.net استفاده کنی

hsadeh
پنج شنبه 27 خرداد 1389, 15:33 عصر
سلام - چطوري ميتونم خروجي اين storedProcedure را در يك ديتاگريد نمايش بدهم ؟ (نمونه كد)
باتشكر

hamedsabzian
پنج شنبه 27 خرداد 1389, 16:36 عصر
اگه دستی و با استفاده از SqlCommand این کار GridView را Bind می کنید:
...
SqlCommand com=new SqlCommand("sp_UserGetByName",con);
com.CommandType=CommandType.StoredProcedure;
com.Parameters.AddWithValue("@Name",TBB.Text);
...
اگه از SqlDataSource استفاده می کنید کافی است Wizard را دنبال کرده و sp را انتخاب کنید.

hsadeh
جمعه 28 خرداد 1389, 10:24 صبح
ضمن تشكر :
1- در خط فرمان زير :

com.Parameters.AddWithValue("@Name",TBB.Text);
منظور از پارامتر "@Name"چيست ؟ آيا منظورتان همان پارامتري است كه در store procedure بكار رفته ؟

2- در ديتا گريد معمولي ، DataMember را بصورت زير تعريف ميكنيم :



Me.GridView1.DataMember = "نام جدول"

در اين حالت كه از store procedure استفاده ميكنيم ،DataMember را چگونه معرفي كنيم ؟
با تشكر

hamedsabzian
جمعه 28 خرداد 1389, 10:49 صبح
1. بله! منظور پارامتریست که به sp پاس داده می شود.
2. نیازی به مقدار دهی اون نیست.

hsadeh
جمعه 28 خرداد 1389, 10:57 صبح
باتشكر مجدد ، پارامترهاي SP از تكست باكس يا كنترل ديگري خونده نميشن بلكه به فيلدهاي جدول پاس داده ميشن . با اين حالت آيا نيازي به نوشتن اين خط فرمان هست ؟ اگه نيازه ، پارامترشو به چي پاس بدم ؟

hamedsabzian
جمعه 28 خرداد 1389, 11:33 صبح
اون نمونه کد فقط یه مثاله.

بلكه به فيلدهاي جدول پاس داده ميشن .
یعنی چی؟ خیلی گنگه!
اگه کدتون رو بزارید با کمی توضیحات بهتره.

hsadeh
جمعه 28 خرداد 1389, 11:50 صبح
اگر منظورتان كد sp هست ، در پست شماره 6 موجوده . اما اگر منظورتان كد پركردن ديتاگريده كه هنوز ننوشتمش و براي همين درخواست كردم .

hamedsabzian
جمعه 28 خرداد 1389, 12:01 عصر
توی کدی که من دیدم، SP هیچ پارامتر ورودیی نداشت، پس نیازی به همچنین کدهایی:

com.Parameters.AddWithValue("@Name",TBB.Text);
نیست.

hsadeh
جمعه 28 خرداد 1389, 12:03 عصر
ممنون - ولي آخرش ديتاگريدم پر نشد !!!!

hamedsabzian
جمعه 28 خرداد 1389, 12:27 عصر
SqlConnection sqlConnection1 = new SqlConnection("my connection string");

SqlCommand cmd = new SqlCommand();


cmd.CommandText = "sp_select_items";
cmd.CommandType = CommandType.StoredProcedure;

cmd.Connection = sqlConnection1;

sqlConnection1.Open();

SqlDataReader dr = cmd.ExecuteReader();

DataTable dt=new DataTable("TBName");
dt.Load(dr);
GV.DataSource=dt;
GV.DataBind();

reader.Close();



sqlConnection1.Close();

hsadeh
جمعه 28 خرداد 1389, 12:41 عصر
در خط
DataTable dt=new DataTable("TBName")
TBName را چي بنويسم ؟

dt.Load(dr); را قبول نميكنه - نميشناسه -من از 2003 استفاده ميكنم آيا در 2003 ميشناسه ؟

hamedsabzian
جمعه 28 خرداد 1389, 12:48 عصر
هر چی دلتون می خواد به جای TBName بنویسید، مهم نیست! اصلا چیزی ننویسید.

dt.Load(dr);
من از VS 2008 استفاده می کنم، مشکلی نداره. با این حال این رو جایگزین کنید:
SqlCommand cmd = new SqlCommand();


cmd.CommandText = "sp_select_items";
cmd.CommandType = CommandType.StoredProcedure;

cmd.Connection = sqlConnection1;

sqlConnection1.Open();

SqlDataReader dr = cmd.ExecuteReader();

GV.DataSource=dr;
GV.DataBind();

reader.Close();

sqlConnection1.Close();

hsadeh
جمعه 28 خرداد 1389, 12:51 عصر
بازم اطلاعات نيومد -

hamedsabzian
جمعه 28 خرداد 1389, 13:05 عصر
صبر كن .... اطلاعات اومد ولي نادرستن

مشخصات جدول رو بدید! (کلید اصلی و ...) تا نمونه کد بزارم!

hsadeh
جمعه 28 خرداد 1389, 13:12 عصر
بصورت تصوير ضميمه كردم

hamedsabzian
جمعه 28 خرداد 1389, 14:01 عصر
نمونه کد:
(بهینه کردنش با خودتون!)

hsadeh
جمعه 28 خرداد 1389, 14:18 عصر
من با vb كد مينويسم !!
دوتا فرم را چطوري استفاده كنم ؟ ميشه راهنمايي كنيد كه فرم
WUC براي چيه ؟ ممنون

hamedsabzian
جمعه 28 خرداد 1389, 14:56 عصر
WUC یک UserControl است. داخلش یه Repeater وجود داره.
یه خاصیت براش تعریف شده به نام Date که اون رو میگره و بر اساس اون Repeater رو پر می کنه.
کد واضح است.
این هم VB: