PDA

View Full Version : سوال: نمایش تعداد نظرات در کنار خبر



reza_majid68
چهارشنبه 24 اسفند 1390, 11:31 صبح
سلام
من تو صفحه اصلی تعداد 5 تا خبر رو نشون میدم به کاربر با گرید ویو و نظراتم رو داخل یه جدول دیگه ذخیره کردم که هر نظر مربوط به خبر خاصی میشه که با کد خبر میشه نظرات رو تفکیک کرد .
حالا میخوام تو گرید ویو کنار هر خبر تعداد نظرات رو هم بنویسم . میدونم چه جوری باید تعداد نظرات رو بدس بیارم ولی نمیدونم چه جوری باید نمایش بدم .
راهنمایی کنید . متشکرم

maxpayn2
چهارشنبه 24 اسفند 1390, 11:38 صبح
خب همونطوری که مثلا یه لیبل میذاری توی گرید که تیتر خبر رو نشون بده کنارش یه لیبل بزار که تعداد نظرات رو نشون بده

reza_majid68
چهارشنبه 24 اسفند 1390, 11:51 صبح
خوب دستوراتش رو چه جوری بنویسم که تو هر تا سطر گرید ویو واسه هر کدوم جدا بنویسه؟

alonemm
چهارشنبه 24 اسفند 1390, 12:15 عصر
باسلام:
میتونید در رویداد RowDataBound به کد نویسی بپردازید.
به مثال زیر دقت کنید:

<%@ Page language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

void CustomersGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{

if(e.Row.RowType == DataControlRowType.DataRow)
{
// Display the company name in italics.
e.Row.Cells[1].Text = "<i>" + e.Row.Cells[1].Text + "</i>";

}

}

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>GridView RowDataBound Example</title>
</head>
<body>
<form id="form1" runat="server">

<h3>GridView RowDataBound Example</h3>

<asp:gridview id="CustomersGridView"
datasourceid="CustomersSqlDataSource"
autogeneratecolumns="true"
allowpaging="true"
onrowdatabound="CustomersGridView_RowDataBound"
runat="server">
</asp:gridview>

<!-- This example uses Microsoft SQL Server and connects -->
<!-- to the Northwind sample database. Use an ASP.NET -->
<!-- expression to retrieve the connection string value -->
<!-- from the Web.config file. -->
<asp:sqldatasource id="CustomersSqlDataSource"
selectcommand="Select [CustomerID], [CompanyName], [Address], [City], [PostalCode], [Country] From [Customers]"
connectionstring="<%$ ConnectionStrings:NorthWindConnectionString%>"
runat="server">
</asp:sqldatasource>


</form>
</body>
</html>

reza_majid68
چهارشنبه 24 اسفند 1390, 12:19 عصر
باسلام:
میتونید در رویداد RowDataBound به کد نویسی بپردازید.
به مثال زیر دقت کنید:

<%@ Page language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

void CustomersGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{

if(e.Row.RowType == DataControlRowType.DataRow)
{
// Display the company name in italics.
e.Row.Cells[1].Text = "<i>" + e.Row.Cells[1].Text + "</i>";

}

}

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>GridView RowDataBound Example</title>
</head>
<body>
<form id="form1" runat="server">

<h3>GridView RowDataBound Example</h3>

<asp:gridview id="CustomersGridView"
datasourceid="CustomersSqlDataSource"
autogeneratecolumns="true"
allowpaging="true"
onrowdatabound="CustomersGridView_RowDataBound"
runat="server">
</asp:gridview>

<!-- This example uses Microsoft SQL Server and connects -->
<!-- to the Northwind sample database. Use an ASP.NET -->
<!-- expression to retrieve the connection string value -->
<!-- from the Web.config file. -->
<asp:sqldatasource id="CustomersSqlDataSource"
selectcommand="Select [CustomerID], [CompanyName], [Address], [City], [PostalCode], [Country] From [Customers]"
connectionstring="<%$ ConnectionStrings:NorthWindConnectionString%>"
runat="server">
</asp:sqldatasource>


</form>
</body>
</html>

خوب من اومدم گرید ویو رو با template خودم طراحی کردم . واسه اون باید چیکار کنم ؟

maxpayn2
چهارشنبه 24 اسفند 1390, 12:40 عصر
میتونی از این ایده بگیری :



<asp:GridView id="GridView3" CssClass="grid_150" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource3" PageSize="100" BorderStyle="None" BorderWidth="0px">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<table id="info1">
<tr>
<td colspan="2">
<a href='NewsView.aspx?id=<%# Eval("news_id") %>' class="link"><%# Eval("titr") %></a>
</td>
</tr>
<tr>
<td style="width:90px"><asp:Image ID="Image1" runat="server" ImageUrl='<%# Eval("image_address") %>' /></td>
<td style="width:auto">&nbsp;<asp:Label ID="Label1" runat="server" Text='<%# Eval("sub_comment") %>'></asp:Label></td>
</tr>
</table>

</ItemTemplate>
<ItemStyle Wrap="true" Width="594" />
<HeaderStyle Height="0" />
</asp:TemplateField>
</Columns>
<EmptyDataTemplate>
<asp:Label ID="Label2" runat="server" Text="در حال حاضر خبری موجود نمی باشد"></asp:Label>
</EmptyDataTemplate>
</asp:GridView>
</div>
<br />

<asp:SqlDataSource ID="SqlDataSource3" runat="server" ConnectionString="<%$ ConnectionStrings:tconetConnectionString %>"
SelectCommand="SELECT * FROM [news] WHERE [allowed] = '1' ORDER BY [news_id] DESC"></asp:SqlDataSource>



میتونی به جای Image یه لیبل بزاری

reza_majid68
چهارشنبه 24 اسفند 1390, 13:21 عصر
خوب آخه من اخبار ها رو از یه جدول میخونم و میخوام نظراتم رو از یه جدول دیگه بخونم

maxpayn2
چهارشنبه 24 اسفند 1390, 13:34 عصر
این دیگه به ASP ربط نداره ، باید دستور Select رو طوری بنویسی که مقادیری که میخوای رو توی یه DataSource بهت برگردونه ، در باره join در SQL سرچ کن ، میتونی توی تالار SQL هم بپرسی

fakhravari
چهارشنبه 24 اسفند 1390, 13:49 عصر
string sql2 = "with CTE as (SELECT [TopicID],[ForumID],[Subject],[Date],[Time],[ViewCount],[UserIP],[Message],[Img],[Atach],(SELECT isnull(convert(nvarchar(50),count(1)),'0') from Comment_Post WHERE(Comment_Post.TopikID = B_Topics.TopicID And Confirm_Comment='True')) AS Comment_Of_count,(SELECT isnull(convert(nvarchar(50),Sum(RatingPost.Rating) ),'0') FROM RatingPost WHERE (RatingPost.PostID = B_Topics.TopicID)) AS SumOfRating,(SELECT isnull(convert(nvarchar(50),count(1)),'0') FROM RatingPost WHERE (RatingPost.PostID = B_Topics.TopicID)) AS Rating_Of_count, row_number() over (order by TopicID desc)as row from B_Topics) select * from CTE where row between 4 and 10 ORDER BY TopicID DESC";

#region Select جمع و امتیاز مطلب
public DataTable Top7_Topik2()
{
SqlConnection con = new SqlConnection(ConnectionString);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = sql2;
con.Open();

SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();

da.Fill(dt);
con.Close();

if (dt.Rows.Count > 0)
{
this.Img = dt.Rows[0]["Img"].ToString();
this.Message = dt.Rows[0]["Message"].ToString();
this.Time = dt.Rows[0]["Time"].ToString();
this.Date = dt.Rows[0]["Date"].ToString();
this.Subject = dt.Rows[0]["Subject"].ToString();
this.Atach = dt.Rows[0]["Atach"].ToString();
this.ForumID = Int32.Parse(dt.Rows[0]["ForumID"].ToString());
this.TopicID = Int32.Parse(dt.Rows[0]["TopicID"].ToString());

this.count_Rare = Int32.Parse(dt.Rows[0]["Rating_Of_count"].ToString());
this.Sum_Rare = Int32.Parse(dt.Rows[0]["SumOfRating"].ToString());
this.count_Cmnts = Int32.Parse(dt.Rows[0]["Comment_Of_count"].ToString());

}
else
{
lasteror = "موردی یافت نشد";

}
return dt;
}
#endregion

alonemm
چهارشنبه 24 اسفند 1390, 14:18 عصر
خوب من اومدم گرید ویو رو با template خودم طراحی کردم . واسه اون باید چیکار کنم ؟

دوست من:
فرقی نمیکنه شما در رویداد RowDataBound به کدنویسی بپردازید.

maxpayn2
چهارشنبه 24 اسفند 1390, 16:11 عصر
وقتی با یه تمپلیت ساده میشه کار رو انجام داد چرا کد نویسی ؟

rana-writes
پنج شنبه 25 اسفند 1390, 21:22 عصر
سلام
منم يه همچين كاري رو تو برنامه م كردم
يه جدول دارم تحت عنوان Post با فيلدهاي PostId , PostTitle , Content
و يه جدول هم به عنوان PostComment با فيلدهاي CommentId , PostId, CommentContent
و دقيقا مثل شما هم موقع نمايش پست نياز داشتم كه تعداد نظرات رو نشون بدم
شايد من بلد نبودم، ولي هيچ joinي اين رو نمايش نمي داد.
در نهايت اومدم يه فيلد به عنوان SumComment تو جدول Post ساختم و با اضافه شدن هر كامنت، به هر پستي، مقدار اون فيلد رو هم آپديت ميكردم
در اين حالت شما براي نمايش تعداد نظرات توي گريدتون، ديگه نياز به خوندن از چندتا جدول ندارين و ميتونين همين فيلد رو فراخواني كنين.

A.S.Roma
پنج شنبه 25 اسفند 1390, 22:56 عصر
سلام
منم يه همچين كاري رو تو برنامه م كردم
يه جدول دارم تحت عنوان Post با فيلدهاي PostId , PostTitle , Content
و يه جدول هم به عنوان PostComment با فيلدهاي CommentId , PostId, CommentContent
و دقيقا مثل شما هم موقع نمايش پست نياز داشتم كه تعداد نظرات رو نشون بدم
شايد من بلد نبودم، ولي هيچ joinي اين رو نمايش نمي داد.
در نهايت اومدم يه فيلد به عنوان SumComment تو جدول Post ساختم و با اضافه شدن هر كامنت، به هر پستي، مقدار اون فيلد رو هم آپديت ميكردم
در اين حالت شما براي نمايش تعداد نظرات توي گريدتون، ديگه نياز به خوندن از چندتا جدول ندارين و ميتونين همين فيلد رو فراخواني كنين.
نه نیاز به Join هست نه نیازی به ذخیره فیلد اضافی :
SELECT PostTitle,Content,
(SELECT COUNT(*) FROM PostComment WHERE PostComment.PostID = Post.ID) AS PostCounter
FROM Post