我想实现论坛回复中回应 
也就是说  有一个贴子,这个贴子有很多人评论,然后每个评论中都有回复【评论回复】,我想实现是是点击评论回复,然后就把 以前回复的内容显示出来,如果没有评论回复,则显示一个文本框和一个按钮,让你进行回复(页面初始化的时候 这个回复是折起来的) 
如: 
  帖子AAAAAAAA 
      
      评论1:BBBBBBBBBBBBBBBBBB  【回复按钮】 
            回复:1231231313 
                  12321321321 
                  8888888888 
                  4564564564 
                  文本框              按钮 
    评论2:BBBBBBBBBBBBBBBBBB    【回复按钮】 
            回复:1231231313 
                  12321321321 
                  8888888888 
                  4564564564 
                  文本框              按钮 我的用datalist 实现的,在datalist 中嵌套了一个datalist ,这个已经实现了,就是一个问题,当我点击回复按钮的时候怎么来让里面这个绑定呢?我每次要点击两次才可以把回复绑定上,因为当我点击按钮的时候,没有办法获得我点击的是哪个行,所以我只能在DataList1_ItemCommand 里面写,那么这样就慢了一步,请教大家  还有什么好办法码??或者其他控件
总结:我想得到当我点击【回复按钮】的时候,怎么知道我点的是哪一行(这个是DataList1嵌套Datalist2,为了 当点击回复按钮的时候绑定Datalist2)

解决方案 »

  1.   

    利用ajax
    点击的时候,利用ajax获取回复信息
    再把回复信息显示到每个item中
      

  2.   

    protected void dataList1_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                string id = dataList.DataKeys[e.Item.ItemIndex].ToString();
                DataList  dl = (DataList)e.Item.FindControl("dataList2")
                Label lbl= (Label)e.Item.FindControl("lbl");            string s= lbl.Text.ToString();         }
        }
     protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
        {
            if (e.Item.ItemIndex != -1 && e.CommandName == "A")
            {
             int id = Convert.ToInt32(DataList1.DataKeys[e.Item.ItemIndex].ToString());
              
             
            }
        }
      

  3.   

    要知道点击那一行有很多种方法:
    如果你的【回复按钮】是LinkButton,可以直接在LinkButton的click事件下获得该行的id或行号,
    代码如下:
        protected void LinkButton1_Click(object sender, EventArgs e)
        {
            LinkButton myLink = (LinkButton)sender;
            int myIndex = ((DataListItem)(myLink.NamingContainer)).ItemIndex;//获得行号
            int myid = Convert.ToInt32(DataList1.DataKeys[delIndex]);//获得id
        }
      

  4.   

    9楼有误,应该是:
    要知道点击那一行有很多种方法: 
    如果你的【回复按钮】是LinkButton,可以直接在LinkButton的click事件下获得该行的id或行号, 
    代码如下: 
        protected void LinkButton1_Click(object sender, EventArgs e) 
        { 
            LinkButton myLink = (LinkButton)sender; 
            int myIndex = ((DataListItem)(myLink.NamingContainer)).ItemIndex;//获得行号 
            int myid = Convert.ToInt32(DataList1.DataKeys[myIndex]);//获得id 
        }
      

  5.   

    楼主你幸好遇到我了,我之前就用DataList和Gridview做过,论坛的主题和回复,下面是代码,修改一下就行。
    ========
    别忘了给分,哈哈!1 <div id="div_bodyright">
     2 
     3 <asp:DataList ID="list" runat="server" RepeatColumns="2" RepeatDirection="Horizontal" DataKeyField="TypeID"
     4     RepeatLayout="Flow" OnItemDataBound="list_ItemDataBound">
     5     <ItemTemplate>
     6         <div id="div11" class="bodyleft">
     7             <div id="title1" class="cls_title">
     8                 <div id="tl1" class="cls_tleft"><img src="images/bullet1.gif" alt="Title"/>&nbsp;<label id="t1" class="lbTxt"><%# DataBinder.Eval(Container.DataItem, "TypeName")%></label></div>
     9                 <div id="tr1" class="cls_tright"><img src="images/more.gif" alt="More " /></div> 
    10             </div>
    11             <div id="list1" class="divlist">
    12             <asp:GridView ID="gvArticle1" runat="server" ShowHeader="false" ShowFooter="false" AutoGenerateColumns="False"  CellPadding="4" ForeColor="#333333" GridLines="None" width="100%">
    13             <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
    14                 <Columns>
    15                     <asp:TemplateField HeaderText="标题">
    16                         <ItemStyle Width="80%" />
    17                         <ItemTemplate>
    18                             <asp:HyperLink ID="title" runat="server" NavigateUrl='<%#"Article.aspx?aid=" + DataBinder.Eval(Container.DataItem,"ArticleId")%>' title='<%#"标题:" + DataBinder.Eval(Container.DataItem, "ArticleTitle") + "\n发布日期:" + DataBinder.Eval(Container.DataItem,"ArticleDateTime") + "\n点击量:" + DataBinder.Eval(Container.DataItem,"ArticleClick")%>'><%# DataBinder.Eval(Container.DataItem, "ArticleTitle")%></asp:HyperLink>
    19                         </ItemTemplate>
    20                     </asp:TemplateField>
    21                     <asp:BoundField DataField="ArticleDate" HeaderText="日期" ItemStyle-Width="20%" />
    22                     
    23                 </Columns>
    24                 <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
    25                 <EditRowStyle BackColor="#999999" />
    26                 <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
    27                 <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
    28                 <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
    29                 <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
    30             </asp:GridView>
    31             </div>
    32         </div>
    33     </ItemTemplate>
    34     <AlternatingItemTemplate>
    35         <div id="div12" class="bodyright">
    36             <div id="title2" class="cls_title">
    37                 <div id="tl2" class="cls_tleft"><img src="images/bullet1.gif" alt="Title"/>&nbsp;<label id="t2" class="lbTxt"><%# DataBinder.Eval(Container.DataItem, "TypeName")%></label></div>
    38                 <div id="tr2" class="cls_tright"><img src="images/more.gif" alt="More " /></div>
    39             </div>
    40             <div id="list1" class="divlist">
    41             <asp:GridView ID="gvArticle2" runat="server" ShowHeader="false"  AutoGenerateColumns="False" ShowFooter="false" CellPadding="4" ForeColor="#333333" GridLines="None"  width="100%">
    42             <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
    43                 <Columns>
    44                     <asp:TemplateField HeaderText="标题">
    45                         <ItemStyle Width="80%" />
    46                         <ItemTemplate>
    47                             <asp:HyperLink ID="title" runat="server" NavigateUrl='<%#"Article.aspx?aid=" + DataBinder.Eval(Container.DataItem,"ArticleId")%>' title='<%#"标题:" + DataBinder.Eval(Container.DataItem, "ArticleTitle") + "\n发布日期:" + DataBinder.Eval(Container.DataItem,"ArticleDateTime") + "\n点击量:" + DataBinder.Eval(Container.DataItem,"ArticleClick")%>'><%# DataBinder.Eval(Container.DataItem, "ArticleTitle")%></asp:HyperLink>
    48                         </ItemTemplate>
    49                     </asp:TemplateField>
    50                     <asp:BoundField DataField="ArticleDate" HeaderText="日期" ItemStyle-Width="20%" />
    51                     
    52                 </Columns>
    53                 <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
    54                 <EditRowStyle BackColor="#999999" />
    55                 <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
    56                 <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
    57                 <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
    58                 <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
    59             </asp:GridView>     
    60             </div>       
    61         </div>
    62     </AlternatingItemTemplate>
    63 </asp:DataList>
    64 </div>.cs中的代码:
         BllArticle bll = new BllArticle();
     
         protected void Page_Load(object sender, EventArgs e)
          {
             if (!IsPostBack)
              {
                 list.DataSource = bll.GetTypeList(false);
                 list.DataBind();
             }
         }
         protected void list_ItemDataBound(object sender, DataListItemEventArgs e)
          {
             if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
              {
                 if (e.Item.ItemType == ListItemType.Item)
                  {
                     GridView gvList1 = (GridView)e.Item.FindControl("gvArticle1");
     
                     gvList1.DataSource = bll.GetArticles(int.Parse(list.DataKeys[e.Item.ItemIndex].ToString()));
                     gvList1.DataBind();
     
                 }
                 if (e.Item.ItemType == ListItemType.AlternatingItem)
                  {                
                     GridView gvList2 = (GridView)e.Item.FindControl("gvArticle2");
                     gvList2.DataSource = bll.GetArticles(int.Parse(list.DataKeys[e.Item.ItemIndex].ToString()));
                     gvList2.DataBind();
                 }
             }
         }在数据层中的代码:
              /// <summary>
             /// 获取文章类别的信息 IsAll是不是显示全部信息
             /// </summary>
             /// <param name="IsAll">true 显示所有,false 显示允许显示的内容</param>
             /// <returns></returns>
             public DataSet GetTypeList(bool IsAll)
              {
                 using (SqlConnection conn = new SqlConnection(DBSqlHelper.DBConnectionString))
                  {
                     StringBuilder sb = new StringBuilder();
                     if(IsAll)
                      {
                         sb.Append(" select * from Info_Type order by TypeOrder desc");
                         return DBSqlHelper.GetDataSet(conn,CommandType.Text,sb.ToString());
                     }
                     else
                      {
                         sb.Append(" select * from Info_Type where TypeVisible=@Visible order by TypeOrder desc");
                         SqlParameter parm = new SqlParameter("@Visible",SqlDbType.VarChar,0);
                         parm.Value = "1";
                         return DBSqlHelper.GetDataSet(conn, CommandType.Text, sb.ToString(), parm);
                     }
                 }
             }
     
              /// <summary>
             /// 获取前N条文章列表数据
             /// </summary>
             /// <param name="TypeID"></param>
             /// <returns></returns>
             public DataSet GetArticles(int TypeID)
              {
                 using (SqlConnection conn = new SqlConnection(DBSqlHelper.DBConnectionString))
                  {
                     StringBuilder sb = new StringBuilder();
                     sb.Append(" select top 10 ArticleId,ArticleTitle,replace(convert(varchar(12),ArticleDate,111),'/','-') as ArticleDate,");
                     sb.Append(" ArticleDate as ArticleDateTime,ArticleClick from Info_Article where ArticleType=@typeid order by ArticleId desc");
     
                     SqlParameter parm = new SqlParameter("@typeid", SqlDbType.Int, 0);
                     parm.Value = TypeID;
     
                     return DBSqlHelper.GetDataSet(conn, CommandType.Text, sb.ToString(),parm);
                 }
             }