View Full Version : سوال: طریقه ساختن تعداد نمایش یک مطلب
m4prog
چهارشنبه 31 فروردین 1390, 12:50 عصر
با سلام
وقتی روی ادامه مطلب کلیک شد در صفحه اصلی یک مقدار به فیلدی که در پایگاه داده sql وجود داره اضافه کنه
چطور میتونم این کارو انجام بدم
b.paseban
چهارشنبه 31 فروردین 1390, 13:06 عصر
سلام بر شما.
اول توی جدول مربوطه یه فیلد viewcount یا همچین چیزی بزار و بعدش توی رویداد کلیک اون دکمه یه دستور بنویس و یکی به مقدار او viewcount اضافه کن.
viewcount رو از جنس int بساز.
m4prog
چهارشنبه 31 فروردین 1390, 13:12 عصر
در صورتی که بخوام من وقتی روی هایپرلینک کلیک شد یکی اضافه کنه چی؟
b.paseban
چهارشنبه 31 فروردین 1390, 13:27 عصر
اگر شما از یه کنترل دیگه مثل link button داخل gridview استفاده کنین میشه از CommandArgument استفاده کنین و توی code behind به این command دسترسی داشته باشین و اونجا با استفاده از کد عملیات محاسبه تعداد نمایش رو انجام بدین.
اما برای hyperlink من راه حلی ندیدیم.
m4prog
چهارشنبه 31 فروردین 1390, 16:35 عصر
کدی که باید بنویسم باید چطوری باشه میشه مثال بزنید هم بره به اون صفحه ای که ادامه مطلب هستش هم به اون فیلد، یک مقدار اضافه کنه
b.paseban
چهارشنبه 31 فروردین 1390, 17:12 عصر
خوب شما اول یه Linkbotton میزاری داخل گریدویو و بعدش به اون یه CommandArgument و یه CommandName اختصاص میدی و رویداد OnRowCommand گریدویو رو ایجاد میکنی.(برای OnRowCommand وقتی روی گریدویو کلیک میکنی توی رویدادهای گریدویو (علامت صاعقه) یکی از رویدادها OnRowCommand هست دوبار روش کلیک کنی میری داخل codebehind )
CommandArgument کلید اصلی جدول شماست.
مثلا برای جدولی که کلید اصلی اون newsid هست ما اینطوری عمل میکنیم:
CommandArgument='<%# Eval("NewsID") %>'
CommandName برای اینکه ما توی رویداد OnRowCommand گریدویو بفهمیم کدوم command باید اجرابشه
استفاده میکنیم.برای این مثال ما CommandName رو DoCounter در نظر میگیریم.
CommandName="DoCounter"
برای اینکه بعد از کلیک هدایت بشه به صفحه مورد نظر :
PostBackUrl='<%#"News.aspx?ID="+Eval("NewsID")%>'
News.aspx صفحه مورد نظر ماست.
توی codebehind داخل رویداد OnRowCommand :
protected void NewsID_RowCommand(object sender, GridViewCommandEventArgs e)
{
switch (e.CommandName)
{
case "DoCounter":
{
ViewState["NewsID"] = Convert.ToInt32(e.CommandArgument);
CounterViewNews();
break;
}
}
}
ما توی این قسمت از یه switch استفاده کردیم که تمام commandname های ارسال شده رو پیگیری کنیم.
بعدشم NewsID رو ریختیم داخل یه viewstate که بعدا توی تابع CounterViewNews();(خط بعدی) ازش استفاده کنیم.
برای تابع CounterViewNews هم به این شکل عمل میکنیم:
private void CounterViewNews()
{
برقراری رشته اتصال
try
{
conect.Open();
string strpsroccomand = "CounterViewedNews";
SqlCommand comand = new SqlCommand(strpsroccomand, conect);
int NewsID = (int)ViewState["NewsID"];
comand.CommandType = CommandType.StoredProcedure;
comand.Parameters.AddWithValue("NewsID", NewsID);
comand.ExecuteReader();
}
catch (Exception ex)
{
Label.Text = ex.Message;
}
finally
{
conect.Close();
}
}
CounterViewedNews هم storeprocedure ماهست که به اینصورت هست:
ALTER PROCEDURE [dbo].[CounterViewedNews]
@NewsID int
AS
UPDATE News_News
SET ViewCount = ViewCount + 1
WHERE NewsID = @NewsID
viewcount فیلد شمارش بازدید ها ماست که با هربار اجرای تابع CounterViewNews یکی بهش اضافه میشه.
حالا توی صفحه مقصد ما یه datacontrol مثل gridview میزاریم و اون رو به یه sqldatasource وصل میکنیم و داخل اون sqldatasource یه SelectParameters میزاریم که QueryStringParameter باشه.
<SelectParameters>
<asp:QueryStringParameter Name="NewsID" QueryStringField="ID" Type="Int32" />
</SelectParameters>
که اینجا ID همون فیلدی هست که ما توی PostBackUrl='<%#"News.aspx?ID="+Eval("NewsID")%>'
مشخص شده و NewsID هم پارامتر ارسالی ماهست.
اوه.
چقدر نوشتم.:متعجب:
m4prog
چهارشنبه 31 فروردین 1390, 20:29 عصر
تو این قسمت به مشکل بر خوردم storeprocedure
هر کاری میکنم اررور میده میگه همچین آبجکتی وجود نداره
m4prog
چهارشنبه 31 فروردین 1390, 22:14 عصر
اضافه نمیکنه که هر کاری که فکرشو بکنی کردم نشد
b.paseban
پنج شنبه 01 اردیبهشت 1390, 10:48 صبح
شما باید storeprodeure رو داخل دیتا بیس درست کنید.
اگر از mssql server استفاده میکنید توی دیتابیس در قسمت programmability یه شاخه به اسم storprodeur باز میشه که از اونجا شما میتونی یه procedure درست کنید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.