gridview 外的编辑按钮 gridview绑定数据当我用双击(或单击)其中一行的一单元格时,立刻变成可编辑状态,并获得当前选择行的数据然后我点击gridview外的Edit按钮,对整个gridview中的数据进行更新在线等..... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1 , 修改EditMode属性 根据currentcell获取当前单元格的内容 Edit按钮:更新dataset 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; } 这个更新按钮恐怕还是要的,否则他会认为你是Cancel了,也就是没保存值。这个还有待思考 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); }这些代码可以实现到双击一行就可以编辑.但更新的代码??寻求高手.... 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的更新操作 这句access sql语句怎么有错 Repeater控件,隔5个变背景色的问题,标题说不明白,请看内容 [AjaxPro.AjaxMethod]调用问题 asp网站应用程序池必须手动回收 如何在页面打开时自动选中Gridview第一行 问一个更新的问题,这个问题很难哦! 怎么注册.net2.0 iTextSharp 的中文支持太差了吧 ASP.NET群,有兴趣者加 紧急:重装系统后无论打开或新建project,都会出现这个问题 现在搞ASP.NET 有前途吗 如何处理JS子菜单
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;
}
这个还有待思考
{
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);
}
这些代码可以实现到双击一行就可以编辑.但更新的代码??寻求高手....
{
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的更新操作