我用 DataList 的编辑功能,在<ItemTemplate>中有一个LinkButton,正常的话应该是点击一次这个linkbutton就切换到
<EditItemTemplate>中,但是我现在的问题的是,点第一次的时候页面刷新一下,页面不变,然后在点击linkbutton一下后切换到<EditItemTemplate>,很是郁闷,为什么要点击两次呢,下面是代码,大侠们帮忙解决下!!!
<ItemTemplate>
                <table width="100%" border="1" cellspacing="0" cellpadding="0"  style="border-style: solid; height:110px;border-color: #669999; border-collapse:collapse" border="1">
                                <tr>
                                    <td style="font-size:17px;" class="td1" rowspan="2">
                                        <asp:Label ID="Daten" runat="server" Text='<%# Eval("Date") %>' /><br />
                                       <asp:Label ID="Timen" runat="server" Text='<%#subTime(Eval("Time").ToString()) %>' />
                                    </td>
                                    <td style="font-size:17px;" class="td2">
                                      <asp:Label ID="Infon" runat="server" Text='<%# Eval("Info") %>' />
                                    </td>
                                </tr>
                                 <tr>
                                    <td style="font-size:17px;" class="td2">
                                       <asp:LinkButton ID="LinkButton1" CommandName="Edit" Text="编辑" runat="server" ></asp:LinkButton>
                                    </td>
                                </tr>
                            </table>
            </ItemTemplate>
            <EditItemTemplate>
                 <table width="100%" border="1" cellspacing="0" cellpadding="0"  style="border-style: solid; height:110px;border-color: #669999; border-collapse:collapse" border="1">
                                <tr>
                                    <td style="font-size:17px;" class="td1" rowspan="2">
                                        <asp:Label ID="DateE" runat="server" Text='<%# Eval("Date") %>' /><br />
                                       <asp:Label ID="TimeE" runat="server" Text='<%#subTime(Eval("Time").ToString()) %>' />
                                    </td>
                                    <td style="font-size:17px;" class="td2">
                                      <asp:TextBox ID="InfoE" runat="server" Text='<%# Eval("Info") %>' TextMode="MultiLine" />
                                    </td>
                                </tr>
                                 <tr>
                                    <td style="font-size:17px;" class="td2">
                                        <asp:LinkButton ID="LinkButton5" CommandName="Update" Text="提交" runat="server" OnClientClick="return confirm('你确定要提交吗?')"></asp:LinkButton>
                                        <asp:LinkButton ID="LinkButton6" CommandName="Cancel" Text="取消" runat="server" ></asp:LinkButton>
                                    </td>
                                </tr>
                            </table>
            </EditItemTemplate>

解决方案 »

  1.   

    你的LinkButton是不是AutoPostBack = true了啊?
      

  2.   

    LinkButton 貌似 没有AutoPostBack 这个属性啊!!!
      

  3.   

    也没 设置 postbackurl
      

  4.   

    看看你有没有用if(!ispostback)
    还有就是你改变为编辑模板的时候有没有绑定数据源
      

  5.   

    if(!ispostback) 
      用了,但是没绑定数据源,下面是我在cs页面里面的跟DataList编辑有关的代码protected void DataList1_UpdateCommand(object source, DataListCommandEventArgs e)
        {
            TextBox tb = (TextBox)e.Item.FindControl("InfoE");
            int id = Convert.ToInt32(this.DataList1.DataKeys[e.Item.ItemIndex].ToString());
            T_Duty td = new T_Duty();
            td = T_DutyManager.GetT_DutyById(id);
            td.Info = tb.Text.ToString();
            T_DutyManager.ModifyT_Duty(td);
            this.DataList1.EditItemIndex = -1;
            ListBind();
            
        }
        protected void DataList1_EditCommand(object source, DataListCommandEventArgs e)
        {
            DataList1.EditItemIndex = e.Item.ItemIndex;
            //DataBind();
        }
        protected void DataList1_CancelCommand(object source, DataListCommandEventArgs e)
        {
            this.DataList1.EditItemIndex = -1;
            ListBind();
        }
      

  6.   

    你没有贴后台代码. 一般来说,
    响应LinkButton的代码应该做如下事情:
    grid.EditItemIndex=相应的行数
    再将grid绑定一次.你可以按这种方式试试.
      

  7.   

    我的是 datalist 绑定 list
      

  8.   

    datalist和grid一样的道理, repeater也一样. 
      

  9.   

    改变为编辑模板的时候再绑定一下绑定数据源啊
    跟datalist的数据源是什么类型有什么关系呢~?
      

  10.   

    DataList1.EditItemIndex = e.Item.ItemIndex;
    ListBind(); 
      

  11.   

    看你上面贴的代码, 你似乎做了EditItemIndex=相应的行数
    是不是你没有做再次绑定?
      

  12.   

    this.DataList1.EditItemIndex = -1;       这句话的作用是退出编辑模版
      

  13.   

    我看你写的:
        protected void DataList1_EditCommand(object source, DataListCommandEventArgs e) 
        { 
            DataList1.EditItemIndex = e.Item.ItemIndex; 
            //DataBind(); 
        } 
    又看到你在其他地方写ListBind();
    你这个DataBind();和ListBind();到底哪个是对的函数名?
    你是不是要用ListBind();?   即:
        protected void DataList1_EditCommand(object source, DataListCommandEventArgs e) 
        { 
            DataList1.EditItemIndex = e.Item.ItemIndex; 
            ListBind(); 
        } 
      

  14.   

    ListBind() 是我自己写的手动绑定数据方法databind() 是DataList本身自带的函数!!!这两个地方肯定是不会错的,错了的话我的页面都不会运行出来的!
      

  15.   

    直接调用datalist本身的DataBind()而不给DataSource赋值,是不对的. 所以你在EditCommand中调用DataBind()是肯定出不来任何内容.
    从你的上下文来看, 你似乎需要在EditCommand中调用手动绑定数据方法ListBind()
      

  16.   

    <ItemTemplate>
                            <asp:LinkButton ID="linkbtnSales" CommandArgument='<%#Eval("Sales") %>' runat="server"
                                OnClick="linkbtnSales_Click" ForeColor="Red">打印</asp:LinkButton>
                        </ItemTemplate>
      

  17.   

    你第一次点的时候触发了Edit事件,第二次点的时候没有触发那个事件,所以第一次刷新,第二次不刷
      

  18.   

    你说哪里错了?是我说的那个DataBind()吗?
      

  19.   

    不是的。只要点LinkButton就会触发Edit事件.
    他现在的程序是Edit事件里面只有一句DataList1.EditItemIndex = e.Item.ItemIndex;
    我没有看到他的全部代码,我猜他的Page_Load里面有调用ListBind().
    注意Page_Load在Edit时间前执行, 也就是说ListBind()先执行, 然后才DataList1.EditItemIndex = e.Item.ItemIndex;, 这样就会出现第一次没有反映出编辑状态,只有下次再次点LinkButton, 调用了ListBind()之后才会反映出编辑状态。