gridview绑定数据
当我用双击(或单击)其中一行的一单元格时,立刻变成可编辑状态,并获得当前选择行的数据
然后我点击gridview外的Edit按钮,对整个gridview中的数据进行更新在线等.....

解决方案 »

  1.   

    1 , 修改EditMode属性
      

  2.   

    根据currentcell获取当前单元格的内容
      

  3.   

    Edit按钮:更新dataset
      

  4.   


    1.在某个模板列中加一个编辑按钮和一个更新按钮                <asp:TemplateField>
                        <EditItemTemplate>
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" CommandName="Edit" Text="编辑" style="display:none"></asp:LinkButton>
                        </ItemTemplate>
                    </asp:TemplateField>最好放在某个字段里面,否则会显示一个空列。2.给gridview添加行绑定事件 onclick和ondblclick随便        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                e.Row.Attributes.Add("ondblclick", "javascript:__doPostBack('GridView1$ctl" + (e.Row.RowIndex + 2).ToString("00") + "$LinkButton1','')");
            }3.更新数据就简单了,找到绑定的那个DataSet然后用这个方法就可以了        /// <summary>
            /// 根据数据集修改数据库
            /// </summary>
            /// <param name="ds">数据集</param>
            /// <param name="sql">获得次数据集的查询语句或存储过程</param>
            /// <param name="parameters">参数列表</param>
            /// <returns>受影响的行数</returns>
            public static int AcceptChanges(DataSet ds, string sql, params SqlParameter[] parameters)
            {
                int rows = 0;
                //取出表结构
                SqlCommand cmd = new SqlCommand(sql, conn);
                if (sql.ToLower().StartsWith("select "))
                {
                    cmd.CommandType = CommandType.Text;
                }
                else
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                }
                if (parameters != null)
                {
                    for (int i = 0; i < parameters.Length; i++)
                    {
                        cmd.Parameters.Add(parameters[i]);
                    }
                }
                SqlDataAdapter da = new SqlDataAdapter();
                da.SelectCommand = cmd;
                //生成实现 DataSet 的更改与关联的 SQL Server 实例之间的协调所需的 Transact-SQL 语句。
                SqlCommandBuilder cb = new SqlCommandBuilder(da);
                try
                {
                    rows = da.Update(ds, sql);
                    ds.AcceptChanges();
                }
                catch
                {
                }
                return rows;
            }
      

  5.   

    这个更新按钮恐怕还是要的,否则他会认为你是Cancel了,也就是没保存值。
    这个还有待思考
      

  6.   

    protected override void Render(HtmlTextWriter writer)
            {
                foreach (GridViewRow row in GridView1.Rows)
                {
                    if (row.RowState == DataControlRowState.Edit)
                    {
                        row.Attributes.Remove("ondblclick");
                        row.Attributes.Remove("style");
                        row.Attributes["title"] = "edit row";
                        continue;
                    }
                    if (row.RowType == DataControlRowType.DataRow)
                    {
                        row.Attributes["ondblclick"] = ClientScript.GetPostBackEventReference(GridView1, "Edit$" + row.RowIndex.ToString(), true);
                        row.Attributes["style"] = "cursor:pointer";
                        row.Attributes["color"] = "color:Blue";
                        row.Attributes["title"] = "double click to edit";
                    }
                }
                base.Render(writer);
            }
    这些代码可以实现到双击一行就可以编辑.但更新的代码??寻求高手....
      

  7.   

    protected void btnedit_Click(object sender, EventArgs e)
            {
                foreach (GridViewRow row in GridView1.Rows)
                {
                    if ((row.RowState & DataControlRowState.Edit) != 0)
                    {
                        int id = row.RowIndex;
                        GridViewUpdateEventArgs e1 = new GridViewUpdateEventArgs(row.RowIndex);
                        IAM.Interface.Base.Data.Dto.InterfaceScheduleDto sch = new IAM.Interface.Base.Data.Dto.InterfaceScheduleDto();
                        sch.Id = int.Parse(ViewState["id"].ToString());
                        TextBox txtseq_no = GridView1.Rows[e1.RowIndex].FindControl("txtSeq_No") as TextBox;
                        sch.Seq_No = int.Parse(txtseq_no.Text);
                        DropDownList ddl = GridView1.Rows[e1.RowIndex].FindControl("DropDownList1") as DropDownList;
                        sch.Description = ddl.SelectedItem.Text;
                        sch.Code = ddl.SelectedValue.ToString();
                        sch.FileName = ((TextBox)GridView1.Rows[e1.RowIndex].Cells[3].Controls[0]).Text;
                        DropDownList import = GridView1.Rows[e1.RowIndex].FindControl("ddlImported") as DropDownList;
                        sch.Import_Completed = Convert.ToChar(import.SelectedValue);
                        sch.Available_Date = Convert.ToDateTime(((TextBox)GridView1.Rows[e1.RowIndex].Cells[5].FindControl("TextBox1")).Text);
                        sch.Update_User = ((TextBox)GridView1.Rows[e1.RowIndex].Cells[7].Controls[0]).Text;
                        sch.Update_Datetime = Convert.ToDateTime(((TextBox)GridView1.Rows[e1.RowIndex].Cells[6].FindControl("txtDate")).Text);                    if (IAM.Interface.Base.DAL.InterfaceFileScheduleDao.UpdateSchedules(sch) != 0)
                        {
                            GridView1.EditIndex = -1;
                            GridView1.DataBind();
                        }
                        else
                        {
                            ScriptManager.RegisterStartupScript(this.UpdatePanel1, typeof(UpdatePanel), "CloseWindow", "<script>alert('Update Fail ');</script>", false);
                        }
                    }
                }
            }實現了GridView外的按鈕對Gridview的更新操作