代码如下,现在可以在页面上修改单元格的内容,想修改之后,通过点击“保存”按钮,将当页的数据update数据库!    public static string sort { set; get; }
    private static string strsql;
    const string vsKey = "searchCriteria"; //ViewState key
    SqlConnection con = new SqlConnection("server=localhost;database=moldsystem;uid=sa;pwd=sa");//这个是全局变量
   
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            searchOrders(string.Empty);
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        AspNetPager1.CurrentPageIndex = 1;
        string s = " where customer_name =" + TextBox4.Text;
        ViewState[vsKey] = s;
        searchOrders(s);
    }
    void searchOrders(string sWhere)
    {
        //SqlDataSource1.SelectCommand = "select * from " + sWhere + " ";
        //DataView dv = (DataView)SqlDataSource1.Select(DataSourceSelectArguments.Empty);
        DataSet ds = new DataSet();
        con.Open();
        SqlDataAdapter sda = new SqlDataAdapter("select * from data_mold " + sWhere + " ", con);
        sda.Fill(ds, "name");
        con.Close();
        AspNetPager1.RecordCount = ds.Tables["name"].Rows.Count;        PagedDataSource pds = new PagedDataSource();
        pds.DataSource = ds.Tables["name"].DefaultView;
        pds.AllowPaging = true;
        pds.CurrentPageIndex = AspNetPager1.CurrentPageIndex - 1;
        pds.PageSize = AspNetPager1.PageSize;
        Repeater1.DataSource = pds;
        Repeater1.DataBind();
    }
    protected void AspNetPager1_PageChanging(object src, Wuqi.Webdiyer.PageChangingEventArgs e)
    {
        //this.AspNetPager1.CurrentPageIndex = e.NewPageIndex;
        searchOrders((string)ViewState[vsKey]);
    }
    protected void AspNetPager1_PageChanged(object src, EventArgs e)
    {
        searchOrders((string)ViewState[vsKey]);
    }
    //protected void btn_all_Click(object sender, EventArgs e)
    //{
       // ViewState[vsKey] = null;
       // btn_all.Enabled = false;
      //  AspNetPager1.CurrentPageIndex = 1;
      //  searchOrders(null);
    //}
    protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
    {    }
    protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            for (int i = 0; i < e.Item.Controls.Count; i++)
            {
                Control control = e.Item.Controls[i];
                GetControl(control);
            }
        }
    }
    protected void GetControl(Control control)
    {
        foreach (Control c in control.Controls)
        {            if (c.HasControls())
            {
                GetControl(c);
            }
            else
            {
                if (c.GetType().ToString() == "System.Web.UI.WebControls.TextBox")
                {
                    TextBox txt = c as TextBox;
                    txt.Attributes.Add("onclick", "Write('" + txt.ClientID + "');");
                    txt.Attributes.Add("onblur", "Update('" + txt.ClientID + "');");
                }
            }
        }
    }
    protected void ddlp_SelectedIndexChanged(object sender, EventArgs e)
    {//脚模板中的下拉列表框更改时激发    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        foreach(RepeaterItem item in Repeater1.Items)
        {
            TextBox txt=item.FindControl("txt") as TextBox ;
            if(txt!=null){}
        }
    }

解决方案 »

  1.   

     protected void Button2_Click(object sender, EventArgs e)
        {
            foreach(RepeaterItem item in Repeater1.Items)
            {
                TextBox txt=item.FindControl("txt") as TextBox ;
                if(txt!=null){}
            }
        }
    不是在这里写修改方法么 
    还有哪里?
      

  2.   

    或者你在repeater中itemcommand事件中查找textbox然后修改
    可以在repeater中添加按钮列指定commandName  和参数  
    在事件中调用修改方法
      

  3.   


    对就是在这,但这个是遍历所有的行,我只想遍历当页的数据,然后怎么取出主键和每个单元格的字段update数据库?????
      

  4.   

    但这个是遍历所有的行,我只想遍历当页的数据
    -------------------------------------这遍历的是你绑定的行, 就是当前页的数据
    然后怎么取出主键和每个单元格的字段update数据库
    -----------------------------------------
    你可以把主键绑定在当前行的hidden 中, 需要修改值的单元格的 获取 按照你现在写的就可以只是FindControl 效率不高,但不影响你完成功能
      

  5.   

    给你一个功能完备的例子,你拷贝下来运行下看看,你就明白思路了
    http://dotnet.aspx.cc/file/Add-Delete-Update-Edit-Data-With-Paging-in-GridView.aspx
      

  6.   

    如果编辑多行,现成的例子
    http://dotnet.aspx.cc/article/a933b187-06c3-4263-9eec-414a54d9c815/read.aspx
      

  7.   

    思路这位兄台的
    可以看看http://blog.csdn.net/pigHead_chen/archive/2010/06/08/5656671.aspx
      

  8.   

    这几天一直在忙个别的需求,现在接着做这个功能
    仔细想想,就是想一点击保存按钮,遍历repeater当页的页面值,保存进数据库!
    期待大侠帮忙没做过这样的,挠头。。
      

  9.   

     <style type="text/css">
            .textbox
            {
                width: 120px;
                text-align: left;
                border-width: 0px;
                float: left;
                margin:1px;
                background-color:smokewhite;
            }
            .textboxClick
            {
                border-width: 1px;
                border-color:Black;
                border-bottom-width:1px;
                border-left-width:1px;
                width: 120px;
                text-align: left;
                float: left;
                background-color:smokewhite;
            }
            
        </style>
        <script type="text/javascript">
        function DBClick(txtbox,txtOldId)
        {
           txtbox.readOnly=false;
           txtbox.className="textboxClick";
           txtbox.select();
           txtOldId.value=txtbox.value;
        }
        function txtBlur(txtboxId,txtOldId,chkboxid)
        {
            txtboxId.readOnly=true;
            txtboxId.className="textbox";
            
            if(txtOldId.value==txtboxId.value)
            {
              if(chkboxid.checked)
              {
                 chkboxid.checked=true;
              }
              else
              {
                 chkboxid.checked=false;
              }
            }
            else
            {
                chkboxid.checked=true;
            }
        
        }
        function SelectClick(obj)
        {
          obj.className="textboxClick";
        }
        function mouseover(obj)
        {
          obj.style.cursor="text";
        }
        </script>    <div style="width: 500px;border: dashed; border-color:Gray; border-width:thin;">
            <asp:Repeater runat="server" ID="Repeater1"
                OnItemDataBound="Repeater1_ItemDataBound">
                <ItemTemplate>
                    <div id="itemDiv" runat="server" style=" border-width:2px; border-color:Black; width: 500px; cursor:text; background-color:smokewhite;">
                        <input type="hidden" class="textbox" id="txtID" runat="server" readonly="readonly"  value='<%# Eval("id")%>' />
                        <div style="display:none">
                        <asp:CheckBox ID="isUpdate" runat="server" />
                        </div>
                        <input type="hidden" class="textbox" id="txtOldValue" runat="server" />
                        
                        <input type="text" class="textbox" id="txtClass" runat="server" readonly="readonly" value='<%# Eval("班组")%>' />
                        <input type="text" class="textbox"  id="txtName" runat="server" readonly="readonly" value='<%#Eval("姓名")%>' />
                        <input type="text"  class="textbox" id="txtSubject" runat="server" readonly="readonly" value='<%#Eval("学科")%>'/>
                        <input type="text"  class="textbox" id="txtScore" runat="server" readonly="readonly" value='<%# Eval("成绩")%>' />
                    </div>
                </ItemTemplate>
            </asp:Repeater>
        </div>
        <asp:Button ID="btnUp" runat="server" Text="修改" onclick="btnUp_Click" />
      

  10.   

    private static DataTable total;
        public static string sort { set; get; }
        protected void Page_Load(object sender, EventArgs e)
        {
            #region 初始化绑定
            if (!IsPostBack)
            {
                //创建和声明DataTable对象
                total = new DataTable();
                //给DataTable对象添加DataColumn对象
                total.Columns.Add(new DataColumn("id", typeof(int)));
                total.Columns.Add(new DataColumn("班组", typeof(string)));
                total.Columns.Add(new DataColumn("姓名", typeof(string)));
                total.Columns.Add(new DataColumn("学科", typeof(string)));
                total.Columns.Add(new DataColumn("成绩", typeof(int)));
                for (int i = 0; i < 10; i++)
                {
                    //声明DataRow对象
                    DataRow dr = total.NewRow();
                    //给DataRow对象中的各列赋值
                    dr["id"]=i;
                    dr["班组"] = " 一班 " + i + ":" + 1; 
                    dr["姓名"] = " 李宏 " + i + ":" + 1;
                    dr["学科"] = " 语文 " + i + ":" + 1;
                    dr["成绩"] = 98;
                   
                    total.Rows.Add(dr);
                }
                //rptpay.DataSource = total;
                //rptpay.DataBind();
                Repeater1.DataSource = total;
                Repeater1.DataBind();
                
            }
            #endregion
        }
        protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                //HtmlGenericControl divitem = e.Item.FindControl("divItem") as HtmlGenericControl;
                //CheckBox chkbox = e.Item.FindControl("isUpdate") as CheckBox;
                //TextBox txtOldValue = e.Item.FindControl("txtOldValue") as TextBox;
                
                //for (int i = 0; i < e.Item.Controls.Count;i++ )
                //{
                //    Control control = e.Item.Controls[i];
                //    GetControl(control, chkbox.ClientID, txtOldValue.ClientID);
                //}            CheckBox chkbox = e.Item.FindControl("isUpdate") as CheckBox;
                HtmlInputHidden txtOldValue = e.Item.FindControl("txtOldValue") as HtmlInputHidden;            HtmlInputText txtClass = e.Item.FindControl("txtClass") as HtmlInputText;
                HtmlInputText txtName = e.Item.FindControl("txtName") as HtmlInputText;
                HtmlInputText txtScore = e.Item.FindControl("txtScore") as HtmlInputText;
                HtmlInputText txtSubject = e.Item.FindControl("txtSubject") as HtmlInputText;            SetAttributes(txtClass, txtOldValue.ClientID, chkbox.ClientID);
                SetAttributes(txtName, txtOldValue.ClientID, chkbox.ClientID);
                SetAttributes(txtScore, txtOldValue.ClientID, chkbox.ClientID);
                SetAttributes(txtSubject, txtOldValue.ClientID, chkbox.ClientID);
            }
        }
        protected void SetAttributes(HtmlInputText txt, string txtOldValueID, string checkboxid)
        {
            txt.Attributes.Add("ondblclick", "DBClick(" + txt.ClientID + "," + txtOldValueID + ");");
            txt.Attributes.Add("onblur", "txtBlur(" + txt.ClientID + "," + txtOldValueID + "," + checkboxid + ");");
            txt.Attributes.Add("onclick", "SelectClick(" + txt.ClientID + ");");
            txt.Attributes.Add("onmouseover", "mouseover(" + txt.ClientID + ");");
        }   
        protected void btnUp_Click(object sender, EventArgs e)
        {
            for(int i=0;i<Repeater1.Items.Count;i++)
            {
                HtmlInputHidden txtid = Repeater1.Items[i].FindControl("txtID") as HtmlInputHidden;
                CheckBox chkbox = Repeater1.Items[i].FindControl("isUpdate") as CheckBox;            HtmlInputText txtClass = Repeater1.Items[i].FindControl("txtClass") as HtmlInputText;
                HtmlInputText txtName = Repeater1.Items[i].FindControl("txtName") as HtmlInputText;
                HtmlInputText txtScore = Repeater1.Items[i].FindControl("txtScore") as HtmlInputText;
                HtmlInputText txtSubject = Repeater1.Items[i].FindControl("txtSubject") as HtmlInputText;
                int score=0;
                int.TryParse(txtScore.Value, out score);
             
                if (chkbox.Checked)
                {
                    DataRow []row = total.Select("id="+txtid.Value);
                    row[0].BeginEdit();
                    row[0]["班组"] = txtClass.Value;
                    row[0]["姓名"] = txtName.Value;
                    row[0]["学科"] = txtSubject.Value;
                    row[0]["成绩"] = score;
                    row[0].EndEdit();
                    chkbox.Checked = false;
                }
            }
            Repeater1.DataSource = total;
            Repeater1.DataBind();
        }
      

  11.   

    直接遍历Repeater控件数据集的datatable内数据应该可以吧。