要求有一个按纽,按了后datagrid所有的记录的可编辑列变成编辑模式,就是变成textbox,然后再一个按纽全部更新.
注意:不是那种用增加个编辑列就可以搞定的,因为要一个按纽就可经编辑所有记录,而编辑列是一条一条的编辑.
自己想的解决方案,用绑定列,字符串格式为<input type="text" value="{0}">,可是这样的结果是无法获取文本域里面的值,因为datagrid1.items[i].cell[0].text里面只会显示其原先的值,而不是你输入的值.
十分郁闷,大家一起想想
注意:不是那种用增加个编辑列就可以搞定的,因为要一个按纽就可经编辑所有记录,而编辑列是一条一条的编辑.
自己想的解决方案,用绑定列,字符串格式为<input type="text" value="{0}">,可是这样的结果是无法获取文本域里面的值,因为datagrid1.items[i].cell[0].text里面只会显示其原先的值,而不是你输入的值.
十分郁闷,大家一起想想
解决方案 »
- 如何c#代码编程操作tfs,主要是权限的管理
- 如何datagridview中当鼠标在单元格中按下时便选中单元格所在的行?
- VS简单问题:怎么新建事件,例如单击窗体?
- 请问 dataset.xsd 与工具箱中的 DataSet 有什么区别
- 如何实现从一个窗口的按钮去关闭另一个窗体,而不退出整个程序,不用hide();
- 请问如何对之前用C#开发的中文软件做英文化
- C#如何阻止一个封装好的过程里的弹窗
- 请教一个制作展开菜单的问题
- dataset如何筛选这样的行
- 問:c#中怎樣使用方法的參數返回一個數組,忙,沒時間查書!!謝謝
- 高分求教:怎样替控件增加一个MouseDown和MouseUp事件?
- 导入到EXCEl中
然后在保存的时候循环整个datagrid
---------datagrid1.items[i].cell[0].text本来就是原先的值.从你的<input type="text" value="{0}">里找答案.模板列+循环应该可以解决你的问题.
<HTML>
<HEAD>
<title>mupgrid</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:DataGrid ID="mygrid" Runat="server" AutoGenerateColumns="False" DataKeyField="Employeeid"
Font-Size="9pt" HeaderStyle-BackColor="darkred" HeaderStyle-ForeColor="white" BackColor="white"
BorderColor="black">
<AlternatingItemStyle BackColor="#ececec"></AlternatingItemStyle>
<Columns>
<asp:TemplateColumn>
<HeaderTemplate>
<asp:CheckBox ID="chekall" Runat="server" onclick="javascript: return select_deselectAll(this.checked,this.id);"></asp:CheckBox><font face="Webdings">a</font>
</HeaderTemplate>
<ItemTemplate>
<input type="hidden" id="selectid" name="selectid" runat="server" value='<%# Container.ItemIndex%>'>
<asp:CheckBox ID="chkbox" Runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="employeeid" HeaderText="EmployeeID"></asp:BoundColumn>
<asp:TemplateColumn>
<HeaderTemplate>
FirstName
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lab_firname" Runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"firstname")%>'>
</asp:Label>
<asp:TextBox ID="txt_firname" Runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"firstname")%>' Visible="False">
</asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="LastName">
<ItemTemplate>
<asp:Label ID="lab_lastname" Runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"lastname")%>'>
</asp:Label>
<asp:TextBox ID="txt_lastname" Runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"lastname")%>' Visible="False">
</asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
<asp:Button ID="edit" Runat="server" Text="Edit"></asp:Button>
<asp:Button ID="update" Runat="server" Text="Update"></asp:Button>
<asp:Button ID="del" Runat="server" Text="DelItems"></asp:Button>
</form>
</body>
</HTML>
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
namespace mydatagrid
{
/// <summary>
/// mupgrid 的摘要说明。
/// </summary>
public class mupgrid : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button edit;
protected System.Web.UI.WebControls.Button update;
protected System.Web.UI.WebControls.DataGrid mygrid;
protected System.Web.UI.WebControls.Button del;
private SqlConnection conn = new SqlConnection("server=(local);uid=sa;pwd=w;database=northwind;");
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string jsScript = "<script language=JavaScript> \n" +
"<!--\n" +
"function confirmDelete (frm) {\n\n" +
" // loop through all elements\n" +
" for (i=0; i<frm.length; i++) {\n\n" +
" // Look for our checkboxes only\n" +
" if (frm.elements[i].name.indexOf ('chkbox') !=-1) {\n" +
" // If any are checked then confirm alert, otherwise nothing happens\n" +
" if(frm.elements[i].checked) {\n" +
" return confirm ('确认要更新记录吗?')\n" +
" }\n" +
" }\n" +
" }\n" +
"}\n\n\n" + "function select_deselectAll (chkVal, idVal) {\n" +
"var frm = document.forms[0];\n" +
"// loop through all elements\n" +
" for (i=0; i<frm.length; i++) {\n" +
" // // Look for our Header Template's Checkbox\n" +
" if (idVal.indexOf ('chekall') != -1) {\n" +
" // Check if main checkbox is checked, then select or deselect datagrid checkboxes \n" +
" if(chkVal == true) {\n" +
" frm.elements[i].checked = true;\n" +
" } else {\n" +
" frm.elements[i].checked = false;\n" +
" }\n" +
" // Work here with the Item Template's multiple checkboxes\n" +
" } else if (idVal.indexOf('chkbox') != -1) {\n" +
" // Check if any of the checkboxes are not checked, and then uncheck top select all checkbox\n" +
" if(frm.elements[i].checked == false) {\n" +
" frm.elements[1].checked = false; // Check if any of the checkboxes are not checked, and then uncheck top select all checkbox\n" +
" }\n" +
" }\n" +
" }\n" +
"}" +
"//--> \n" +
"</script>";
RegisterClientScriptBlock("clientScript",jsScript);
WebControl edit = (WebControl)Page.FindControl("update");
edit.Attributes.Add("onclick","return confirmDelete(this.form);");
if(!IsPostBack)
{
setbind();
}
}
private void setbind()
{
conn.Open();
SqlDataAdapter sda = new SqlDataAdapter("select employeeid,firstname,lastname from employees",conn);
DataSet ds = new DataSet();
sda.Fill(ds);
mygrid.DataSource = ds.Tables[0].DefaultView;
mygrid.DataBind();
ds.Clear();
sda.Dispose();
conn.Close();
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.edit.Click += new System.EventHandler(this.edit_Click);
this.update.Click += new System.EventHandler(this.update_Click);
this.del.Click += new System.EventHandler(this.del_Click);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion private void edit_Click(object sender, System.EventArgs e)
{
foreach(DataGridItem i in mygrid.Items)
{
if(((CheckBox)i.FindControl("chkbox")).Checked == true)
{
((TextBox)i.FindControl("txt_firname")).Visible = true;
((TextBox)i.FindControl("txt_lastname")).Visible = true;
((Label)i.FindControl("lab_firname")).Visible = false;
((Label)i.FindControl("lab_lastname")).Visible = false;
i.BackColor = System.Drawing.Color.LightGreen;
}
}
} private void update_Click(object sender, System.EventArgs e)
{ foreach(DataGridItem i in mygrid.Items)
{
if(((CheckBox)i.FindControl("chkbox")).Checked == true)
{
if(((TextBox)i.FindControl("txt_firname")).Text != ((Label)i.FindControl("lab_firname")).Text || ((TextBox)i.FindControl("txt_lastname")).Text != ((Label)i.FindControl("lab_lastname")).Text)
{
try
{
conn.Open();
string sql = "update employees set firstname='"+(((TextBox)i.FindControl("txt_firname")).Text).ToString()+"',lastname='"+(((TextBox)i.FindControl("txt_lastname")).Text).ToString()+"' where employeeid = " + i.Cells[1].Text.ToString();
SqlCommand cmd = new SqlCommand(sql,conn);
cmd.ExecuteNonQuery();
}
catch(Exception ex)
{
Response.Write(ex);
}
finally
{
conn.Close();
}
//Response.Write("记录号:"+ this.mygrid.DataKeys[int.Parse(((HtmlInputHidden)i.FindControl("selectid")).Value)] + "FirstName:" + ((TextBox)i.FindControl("txt_firname")).Text + "LastName:" + ((TextBox)i.FindControl("txt_lastname")).Text + "<br>");
}
((TextBox)i.FindControl("txt_firname")).Visible = false;
((TextBox)i.FindControl("txt_lastname")).Visible = false;
((Label)i.FindControl("lab_firname")).Visible = true;
((Label)i.FindControl("lab_lastname")).Visible = true;
((CheckBox)i.FindControl("chkbox")).Checked = false;
}
}
setbind();
} private void del_Click(object sender, System.EventArgs e)
{
string ids = "";
bool flag = false;
foreach(DataGridItem i in mygrid.Items)
{
if(((CheckBox)i.FindControl("chkbox")).Checked)
{
flag = true;
ids += i.Cells[1].Text.ToString() + ",";
}
}
if(flag == true)
{
string sql = "delete from employees where employeeid in(" + ids.Substring(0,ids.LastIndexOf(",")) +")";
try
{
conn.Open();
SqlCommand cmd = new SqlCommand(sql,conn);
cmd.ExecuteNonQuery();
}
catch(Exception ex)
{
Response.Write(ex);
}
finally
{
conn.Close();
setbind();
}
}
}
}
}
我总不能写<input type="text" value="{0}" runat=server>
或
<input type="text" value="{0}" name="{0}">
吧
<input type="text" value="{0}"> 改成
<input type="text" name="myInput" value="{0}">
string values=Request["myInput"];
string[] inputs=values.Split(',');
第i行的输入值对应inputs[i];
zzfloat(方舟)
<input type="text" value="{0}"> 改成
<input type="text" name="myInput" value="{0}">
string values=Request["myInput"];
string[] inputs=values.Split(',');
这种方法其实是行不通的
采用了elivehai(wzh) 的方法,
现在给分
不过大家可以想想有没有更好的方法
能否详尽
如果要编辑的列太多,索性做两个TABLE,一个管显示,一个管编辑,一按更新就切换。
=================== 注意了 最佳解决方案!! =============================
做两个DataGrid 一个浏览用,一个编辑用。浏览用的正常的方式,编辑用的(加模版列)把TextBox“上移一行”,就是把Label换成TextBox,不知道我说明白了没有。单击按钮,切换两个DataGrid的显示。
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
namespace mydatagrid
{
/// <summary>
/// mupgrid 的摘要说明。
/// </summary>
public class mupgrid : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button edit;
protected System.Web.UI.WebControls.Button update;
protected System.Web.UI.WebControls.DataGrid mygrid;
protected System.Web.UI.WebControls.Button del;
private SqlConnection conn = new SqlConnection("server=(local);uid=sa;pwd=w;database=northwind;");
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string jsScript = "<script language=JavaScript> \n" +
"<!--\n" +
"function confirmDelete (frm) {\n\n" +
" // loop through all elements\n" +
" for (i=0; i<frm.length; i++) {\n\n" +
" // Look for our checkboxes only\n" +
" if (frm.elements[i].name.indexOf ('chkbox') !=-1) {\n" +
" // If any are checked then confirm alert, otherwise nothing happens\n" +
" if(frm.elements[i].checked) {\n" +
" return confirm ('确认要更新记录吗?')\n" +
" }\n" +
" }\n" +
" }\n" +
"}\n\n\n" + "function select_deselectAll (chkVal, idVal) {\n" +
"var frm = document.forms[0];\n" +
"// loop through all elements\n" +
" for (i=0; i<frm.length; i++) {\n" +
" // // Look for our Header Template's Checkbox\n" +
" if (idVal.indexOf ('chekall') != -1) {\n" +
" // Check if main checkbox is checked, then select or deselect datagrid checkboxes \n" +
" if(chkVal == true) {\n" +
" frm.elements[i].checked = true;\n" +
" } else {\n" +
" frm.elements[i].checked = false;\n" +
" }\n" +
" // Work here with the Item Template's multiple checkboxes\n" +
" } else if (idVal.indexOf('chkbox') != -1) {\n" +
" // Check if any of the checkboxes are not checked, and then uncheck top select all checkbox\n" +
" if(frm.elements[i].checked == false) {\n" +
" frm.elements[1].checked = false; // Check if any of the checkboxes are not checked, and then uncheck top select all checkbox\n" +
" }\n" +
" }\n" +
" }\n" +
"}" +
"//--> \n" +
"</script>";
RegisterClientScriptBlock("clientScript",jsScript);
WebControl edit = (WebControl)Page.FindControl("update");
edit.Attributes.Add("onclick","return confirmDelete(this.form);");
if(!IsPostBack)
{
setbind();
}
}
private void setbind()
{
conn.Open();
SqlDataAdapter sda = new SqlDataAdapter("select employeeid,firstname,lastname from employees",conn);
DataSet ds = new DataSet();
sda.Fill(ds);
mygrid.DataSource = ds.Tables[0].DefaultView;
mygrid.DataBind();
ds.Clear();
sda.Dispose();
conn.Close();
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.edit.Click += new System.EventHandler(this.edit_Click);
this.update.Click += new System.EventHandler(this.update_Click);
this.del.Click += new System.EventHandler(this.del_Click);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion private void edit_Click(object sender, System.EventArgs e)
{
foreach(DataGridItem i in mygrid.Items)
{
if(((CheckBox)i.FindControl("chkbox")).Checked == true)
{
((TextBox)i.FindControl("txt_firname")).Visible = true;
((TextBox)i.FindControl("txt_lastname")).Visible = true;
((Label)i.FindControl("lab_firname")).Visible = false;
((Label)i.FindControl("lab_lastname")).Visible = false;
i.BackColor = System.Drawing.Color.LightGreen;
}
}
} private void update_Click(object sender, System.EventArgs e)
{ foreach(DataGridItem i in mygrid.Items)
{
if(((CheckBox)i.FindControl("chkbox")).Checked == true)
{
if(((TextBox)i.FindControl("txt_firname")).Text != ((Label)i.FindControl("lab_firname")).Text || ((TextBox)i.FindControl("txt_lastname")).Text != ((Label)i.FindControl("lab_lastname")).Text)
{
try
{
conn.Open();
string sql = "update employees set firstname='"+(((TextBox)i.FindControl("txt_firname")).Text).ToString()+"',lastname='"+(((TextBox)i.FindControl("txt_lastname")).Text).ToString()+"' where employeeid = " + i.Cells[1].Text.ToString();
SqlCommand cmd = new SqlCommand(sql,conn);
cmd.ExecuteNonQuery();
}
catch(Exception ex)
{
Response.Write(ex);
}
finally
{
conn.Close();
}
//Response.Write("记录号:"+ this.mygrid.DataKeys[int.Parse(((HtmlInputHidden)i.FindControl("selectid")).Value)] + "FirstName:" + ((TextBox)i.FindControl("txt_firname")).Text + "LastName:" + ((TextBox)i.FindControl("txt_lastname")).Text + "<br>");
}
((TextBox)i.FindControl("txt_firname")).Visible = false;
((TextBox)i.FindControl("txt_lastname")).Visible = false;
((Label)i.FindControl("lab_firname")).Visible = true;
((Label)i.FindControl("lab_lastname")).Visible = true;
((CheckBox)i.FindControl("chkbox")).Checked = false;
}
}
setbind();
} private void del_Click(object sender, System.EventArgs e)
{
string ids = "";
bool flag = false;
foreach(DataGridItem i in mygrid.Items)
{
if(((CheckBox)i.FindControl("chkbox")).Checked)
{
flag = true;
ids += i.Cells[1].Text.ToString() + ",";
}
}
if(flag == true)
{
string sql = "delete from employees where employeeid in(" + ids.Substring(0,ids.LastIndexOf(",")) +")";
try
{
conn.Open();
SqlCommand cmd = new SqlCommand(sql,conn);
cmd.ExecuteNonQuery();
}
catch(Exception ex)
{
Response.Write(ex);
}
finally
{
conn.Close();
setbind();
}
}
}
}
}
做两个DataGrid 一个浏览用,一个编辑用。浏览用的正常的方式,编辑用的(加模版列)把TextBox“上移一行”,就是把Label换成TextBox,不知道我说明白了没有。单击按钮,切换两个DataGrid的显示。这样也行吧。不过好像复杂点,呵呵
没看明白