1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| protected void Page_Load(object sender, System.EventArgs e)
{
DataSet ds = new DataSet();
ds.Tables.Add("ForumGroups");
ds.Tables.Add("Forums");
ds.Tables.Add("ForumSubforums");
DbDataAdapter da = providerFactory.CreateDataAdapter();
da.SelectCommand = this.cmd;
this.cn.Open();
this.cmd.CommandText = "SELECT DISTINCT ForumGroups.GroupID, ForumGroups.GroupName FROM ForumGroups INNER JOIN Forums ON ForumGroups.GroupID=Forums.GroupID";
da.Fill(ds.Tables[0]);
string strSQLAllowedForums = "SELECT ForumGroupPermissions.ForumID FROM " +
"ForumUsersInGroup INNER JOIN ForumGroupPermissions ON ForumUsersInGroup.GroupID = ForumGroupPermissions.GroupID " +
"WHERE ForumUsersInGroup.UserID=? AND ForumGroupPermissions.AllowReading=?"; //query select allowed forums
this.cmd.CommandText =
"SELECT Forums.ForumID, Forums.Title, Forums.Description, Count(ForumTopics.TopicID) AS Topics, Forums.GroupID, MAX(ForumTopics.LastMessageID) as LatestMessageID " +
"FROM (Forums LEFT OUTER JOIN ForumTopics ON Forums.ForumID=ForumTopics.ForumID) " +
"LEFT OUTER JOIN ForumMessages ON ForumTopics.LastMessageID = ForumMessages.MessageID " +
"WHERE Forums.ForumID NOT IN (SELECT SubForumID FROM ForumSubforums)" + //not a subforum
//"where ForumSubforums ON Forums.ForumID = ForumSubforums.ParentForumID" +
"AND (Forums.ForumID NOT IN (SELECT ForumID FROM ForumGroupPermissions WHERE AllowReading=?) OR Forums.ForumID IN (" + strSQLAllowedForums + ")) " + //not a private forum
"GROUP BY Forums.ForumID, Forums.Title, Forums.Description, Forums.GroupID, Forums.OrderByNumber " +
"ORDER BY Forums.OrderByNumber";
Utils.DB.FillCommandParamaters(ref cmd, true, CurrentUserID, true);
da.Fill(ds.Tables[1]);
string ch = "SELECT ForumID, Title, Description, Premoderated, GroupID, MembersOnly, OrderByNumber FROM Forums WHERE (NOT EXISTS (SELECT 1 AS Expr1 FROM ForumSubforums WHERE (SubForumID = Forums.ForumID)))";
//int i=int.Parse(ch);
this.cmd.CommandText = "SELECT ForumSubforums.SubForumID, Forums.ForumID FROM ForumSubforums INNER JOIN Forums ON ForumSubforums.ParentForumID = Forums.ForumID";
Utils.DB.FillCommandParamaters(ref cmd, true, CurrentUserID, true);
da.Fill(ds.Tables[2]);
this.cn.Close();
ds.Relations.Add(new DataRelation("ForumGroupsForums", ds.Tables[0].Columns["GroupID"], ds.Tables[1].Columns["GroupID"]));
ds.Relations.Add(new DataRelation("ForumSubForums", ds.Tables[1].Columns["ForumID"], ds.Tables[2].Columns["ForumID"]));
this.rptGroupsList.DataSource = ds.Tables[0];
this.rptGroupsList.DataBind();
this.Repeater1.DataSource = ds.Tables[2];
this.Repeater1.DataBind();
rptGroupsList.Visible = (rptGroupsList.Items.Count != 0);
lblNoForums.Visible = (rptGroupsList.Items.Count == 0);
Repeater1.Visible = (rptGroupsList.Items.Count != 0);
lblNoForums.Visible = (rptGroupsList.Items.Count == 0);
this.Title = forumTitle;
}
protected void rptGroupsList_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater nestedRepeater = e.Item.FindControl("rptForumsList") as Repeater;
DataRowView dv = e.Item.DataItem as DataRowView;
nestedRepeater.DataSource = dv.CreateChildView("ForumGroupsForums");
nestedRepeater.DataBind();
}
}
protected void rptForumsList_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater Repeater = e.Item.FindControl("rptForumsList") as Repeater;
DataRowView dv = e.Item.DataItem as DataRowView;
Repeater.DataSource = dv.CreateChildView("ForumSubForums");
Repeater.DataBind();
}
} |
Partager