PDA

View Full Version : صفحه بندی گریدویو



mahtab kf
دوشنبه 23 بهمن 1391, 02:39 صبح
سلام دوستان
من در مقاله http://barnamenevis.org/showthread.php?322558-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%DB%8C%D8%A7%D8%AF%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-Custom-Paging-%D8%AF%D8%B1-GridView-%D8%A8%D8%A7-%D8%AA%DA%A9%D9%86%D9%88%D9%84%D9%88%DA%98%DB%8C-Ajax
(آموزش پیاده سازی Custom Paging در GridView با تکنولوژی Ajax) که توسط آقای alonemm (http://barnamenevis.org/member.php?127814-alonemm) نوشته شده بود به مشکل برخوردم ولی در اون مبحث کسی سوالمو جواب نداد پس تو تایپیک جدید مطرح می کنم:
من می خوام با querystring بعد از انتخاب قطعه توسط کاربر گریدویو برپایه همون موضوع نمایش داده بشه و صفحه بندی بشه :
من sp رو به اینصورت نوشتم :

ALTER PROCEDURE [dbo].[CastumPaging]
(
@SQLTableName nvarchar(100),
@name nvarchar(20),
@PageIndex int,
@PageSize int
)
AS
BEGIN
declare @SQLText nvarchar(500)
set @SQLText = 'SELECT * FROM (SELECT * , ROW_NUMBER() OVER(ORDER BY id) as RowNum FROM '+@SQLTableName+' where (NameItem='+@name+')) as DerivedTableName WHERE RowNum BETWEEN '+ str(@PageIndex) +' AND'+ str((@PageIndex+ @PageSize) - 1)
exec(@SQLText)
END

و کاراکتر name رو اینطوری ارسال کردم:

string SQLTableName = "[TBaddItem]";
string name= Request.QueryString["name"];
PageSize = 6;
PageIndex = 1;
PageCount = Convert.ToInt32(Math.Ceiling((double)ADO.countall( SQLTableName,name) / (double)PageSize));
اینم کلاسم:

public DataSet ExecuteDataset(string SQLTableName, string name, int PageIndex, int PageSize)
{
using (SqlConnection con = new SqlConnection(ConnectionString))
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "[CastumPaging]";
cmd.Parameters.AddWithValue("@SQLTableName", SQLTableName);
cmd.Parameters.AddWithValue("@name",name);
cmd.Parameters.AddWithValue("@PageIndex", PageIndex);
cmd.Parameters.AddWithValue("@PageSize", PageSize);
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(cmd);
con.Open();
da.Fill(ds);
con.Close();
return ds;
}
}
اما خطای زیرو میگیره:

Invalid column name 'Cpu'.که cpu در آن نام قطعه انتخاب شده است
ممنون میشم راهنماییم کنید

taghi.km
دوشنبه 23 بهمن 1391, 11:40 صبح
سلام به نظر من اول تست کن ببین sp جواب بر مي گردونه پارامترهای ورودی رو بررسی کن که درست ارسال بشند

mahtab kf
دوشنبه 23 بهمن 1391, 12:15 عصر
سلام به نظر من اول تست کن ببین sp جواب بر مي گردونه پارامترهای ورودی رو بررسی کن که درست ارسال بشند
من خیلی سرچ کردم اما متوجه نشدم میشه لطفاً بگید چطور اینکارو بکنم؟
ممنون

ahmad156
دوشنبه 23 بهمن 1391, 12:24 عصر
از Managment Studio خود SQL Server امتحان کنین

mahtab kf
دوشنبه 23 بهمن 1391, 12:36 عصر
از Managment Studio خود SQL Server امتحان کنین:لبخند:
میشه لطفاً بگید چطور اینکارو بکنم؟ من تا حالا اینکارو نکردم :خجالت:

ahmad156
دوشنبه 23 بهمن 1391, 13:00 عصر
http://www.quackit.com/sql_server/sql_server_2008/tutorial/sql_server_stored_procedures.cfm

taghi.km
دوشنبه 23 بهمن 1391, 13:05 عصر
رو این خط
SqlCommand cmd = new SqlCommand();
کلید F9 رو بزن بعد با کلید F10 برنامه رو Trace کن
پارامترهای ارسالی رو میتونی با راست کلیک روی پارامتر و انتخاب گزینه های watch را بررسی کنی
مقدار ds رو هم به همین ترنیب چک کن ببین table داره یا نه اگه داشت ببین table چند تا row داره

mahtab kf
دوشنبه 23 بهمن 1391, 14:42 عصر
رو این خط
SqlCommand cmd = new SqlCommand();
کلید F9 رو بزن بعد با کلید F10 برنامه رو Trace کن
پارامترهای ارسالی رو میتونی با راست کلیک روی پارامتر و انتخاب گزینه های watch را بررسی کنی
مقدار ds رو هم به همین ترنیب چک کن ببین table داره یا نه اگه داشت ببین table چند تا row داره
اصلاً sp رو اجرا نمی کنه همون اول به go دوم که می رسه stop میشه و row صفر رو برمی گردونه

USE [MyWeblog]
GO
/****** Object: StoredProcedure [dbo].[CastumPaging] Script Date: 02/11/2013 13:48:41 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- Batch submitted through debugger: SQLQuery1.sql|7|0|C:\Users\aria-pc\Documents\SQL Server Management Studio\Projects\SQLQuery1.sql
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[CastumPaging]
(
@SQLTableName nvarchar(100),
@name nvarchar(20),
@PageIndex int,
@PageSize int
)
AS
BEGIN
declare @SQLText nvarchar(500)

set @SQLText = 'SELECT * FROM (SELECT * , ROW_NUMBER() OVER(ORDER BY id) as RowNum FROM '+@SQLTableName+' where (NameItem='+@name+')) as DerivedTableName WHERE RowNum BETWEEN '+ str(@PageIndex) +' AND'+ str((@PageIndex+ @PageSize) - 1)
exec(@SQLText)
END

ds هم null هست:ناراحت:

taghi.km
دوشنبه 23 بهمن 1391, 15:46 عصر
شما بهتر قدم به قدم پیش بری ابتدا sp رو از طریق sqlserver management چک کن فکر کنم کد زیر کمکت کنه
declare @SQLTableName nvarchar(100), @name nvarchar(20), @PageIndex int, @PageSize int
set @SQLTableName = 'tablename'
set @name = 'itemname'
set @PageIndex = 0
set @PageSize = 10
declare @SQLText nvarchar(500)
set @SQLText = 'SELECT * FROM (SELECT * , ROW_NUMBER() OVER(ORDER BY id) as RowNum FROM '+@SQLTableName+' where (NameItem='+@name+')) as DerivedTableName WHERE RowNum BETWEEN '+ str(@PageIndex) +' AND'+ str((@PageIndex+ @PageSize) - 1)
exec(@SQLText)

پارامتره رو من همینجوری مقدار دادم

mahtab kf
دوشنبه 23 بهمن 1391, 18:06 عصر
شما بهتر قدم به قدم پیش بری ابتدا sp رو از طریق sqlserver management چک کن
ممنون از شما وقتی اجرا می کنم پیغام زیرو میده:

Msg 201, Level 16, State 4, Procedure CastumPaging, Line 0
Procedure or function 'CastumPaging' expects parameter '@SQLTableName', which was not supplied.

(1 row(s) affected)
که داخل row مقدار null است

taghi.km
دوشنبه 23 بهمن 1391, 18:28 عصر
شما باید داخل sp رو چک کنید اون تیکه کدی که گذاشتم رو تست کردی
مهم بدنه sp هست کاری به تعاریف اولش نداشته باش در ضمن فکر کنم شما دارید دستور ALTER PROCEDURE dbo.CastumPaging رو اجرا میکنید که sp رو تغییر میده و کاری با اجرای داخلش نداره

mahtab kf
دوشنبه 23 بهمن 1391, 18:44 عصر
شما باید داخل sp رو چک کنید اون تیکه کدی که گذاشتم رو تست کردی
مهم بدنه sp هست کاری به تعاریف اولش نداشته باش در ضمن فکر کنم شما دارید دستور ALTER PROCEDURE dbo.CastumPaging رو اجرا میکنید که sp رو تغییر میده و کاری با اجرای داخلش نداره
اولش همین کارو میکردم:لبخند: اما بعدش روی sp کلیک راست کردم و گزینه "Execute Stored Procedure..." رو زدم بعد ok کردم بعد پیغام زیرو داد:

Msg 201, Level 16, State 4, Procedure CastumPaging, Line 0
Procedure or function 'CastumPaging' expects parameter '@SQLTableName', which was not supplied.

(1 row(s) affected)
درسته؟

mahtab kf
دوشنبه 23 بهمن 1391, 18:57 عصر
من واقعا عذر می خوام مقادیرو در دستور ALTER PROCEDURE dbo.CastumPaging اضافه کرده بودم ولی اینبار در "Execute Stored Procedure..."وارد کردم و خطای زیرو داد:


Msg 207, Level 16, State 1, Line 1
Invalid column name 'cpu'.

(1 row(s) affected)




همون خطای اولمو :خجالت::ناراحت:

taghi.km
دوشنبه 23 بهمن 1391, 19:06 عصر
ببخشید مقدار @name چی پاس میشه و فیلدهای جدول TBaddItem چیه؟

mahtab kf
دوشنبه 23 بهمن 1391, 19:24 عصر
ببخشید مقدار @name چی پاس میشه و فیلدهای جدول TBaddItem چیه؟
مقدار NAME با انتخاب کاربر از یک ddl با query string فرستاده میشه که نام قطعه است و جدولم شامل id,NameItem,model,brand,sale می باشد که من می خوام قطعات با شرط NameItem=@name نمایش داده بشه. امیدوارم منظورمو رسونده باشم

taghi.km
دوشنبه 23 بهمن 1391, 19:41 عصر
بهتره این خط رو تجزیه کنید
SELECT * FROM (SELECT * , ROW_NUMBER() OVER(ORDER BY id) as RowNum FROM '+@SQLTableName+' where (NameItem='+@name+')) as DerivedTableName WHERE RowNum BETWEEN '+ str(@PageIndex) +' AND'+ str((@PageIndex+ @PageSize) - 1)
مثلا اول
SELECT * , ROW_NUMBER() OVER(ORDER BY id) as RowNum FROM '+@SQLTableName
رو امتحان کنی اگه جواب گرفتی قسمت های بعدی رو اضافه کنید

mahtab kf
دوشنبه 23 بهمن 1391, 20:03 عصر
ممنون از شما که با حوصله پرسشهامو پاسخ دادید این رو امتحان کردم و جواب داده بعداً قسمت where (NameItem='+@name+') رو اضافه کردم و مدام خطا گرفت

Himalaya
سه شنبه 24 بهمن 1391, 00:09 صبح
سلام
به قسمت Where نگاه کنید


where (NameItem='+@name+')

اگه فرض کنیم مقدار name@ برابر Cpu باشه، بعد از جاگزاری قسمت Where میشه این


where (NameItem=Cpu)

چون تو دستور نهایی که قراره اجرا بشه، خبری از تک کوتیشن های اطراف Cpu نیست، Sql فکر میکنه Cpu اسم یه ستونه و پیغام


Invalid column name 'cpu'.

رو میده. تو متغیر SQLText@ بخش Where رو اینجوری بنویسید

where (NameItem='''+@name+''')

mahtab kf
سه شنبه 24 بهمن 1391, 10:59 صبح
از همه دوستان ممنونم مشکلم حل شد و اشتباه همونی بود که دوست خوبمون karaji333 گفتند واقعاً از ایشون ممنونم :تشویق: