关于gridview的编辑列问题,急!!!!!!!!!!! 答对狂给100大分
我在服务器端写的数据显示和 "编辑 "按扭的代码,但是我在点击编辑后,修改
TextBox框的值,然后点击更新。可是得到的不是修改以后的值,而是没有修
改以前的值。我调试了一下,发现进入到了RowUpdating事件里了,但是用
String tb=((TextBox)gv.Rows[e.RowIndex].Cells[2].Controls[0]).Text
得到的值是没有修改以前的。请教了二十几个群,和十几个论坛,就是没有
人知道。在线急等。
[解决办法]
试试这个
String tb = ((TextBox)gv.Rows[e.EditIndex].Cells[2].Controls[0]).Text ;
[解决办法]
GridViewUpdateEventArgs.NewValues
[解决办法]
Keys字典中一般存放的是数据源中的主键字段的key和value的对应值,如果主键由多个字段组成,那么Keys为每个键字段添加其字段名称和值。OldValues中存放的是要更新的行的字段名和原始值,每个字段为其中的一项。NewValues中存放的是要更新的行的字段名和修改后的值,每个字段为其中的一项。注意,主键字段只存放于keys集合中。
这三个集合中的每一项都是DictionaryEntry类型的对象,我们可以用DictionaryEntry.Key来确定一个项的字段名称,用DictionaryEntry.Value来确定某项的值。
http://goforideal.bokee.com/viewdiary.14490513.html
[解决办法]
page-load中是否加入了ispostback?
[解决办法]
楼上正解,LZ没有做ispostback判断就在page_load事件对gridview进行了绑定
[解决办法]
是啊,要加ispostback,或者还要重新DataBind一下
[解决办法]
同一问题怎么问两遍?
LZ 有空看看下贴的回复!
http://community.csdn.net/Expert/topic/5547/5547135.xml?temp=.050152
另,LZ 把代码贴出来晒晒!看代码比较容易些!
[解决办法]
数据绑定要放在
if(!IsPostBack)里面
要不然每次页面回送都会进行一次数据绑定,数据总是初始的
[解决办法]
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindRole();
}
}
private void BindRole()
{
DataTable dt = roleDB.GetAllRole();
gvRoles.DataSource = dt.DefaultView;
gvRoles.DataBind();
}
protected void gvRoles_RowEditing(object sender, GridViewEditEventArgs e)
{
gvRoles.EditIndex = e.NewEditIndex;
BindRole();
}
protected void gvRoles_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
gvRoles.EditIndex = -1;
BindRole();
}
protected void gvRoles_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridViewRow gvrRoles = gvRoles.Rows[gvRoles.EditIndex];
int iRoleID = int.Parse(gvRoles.DataKeys[gvRoles.EditIndex].Value.ToString());
string strRoleName = ((TextBox)gvrRoles.FindControl( "txtRoleName ")).Text.Trim();
string strRoleDes = ((TextBox)gvrRoles.FindControl( "txtDes ")).Text.Trim();
int iFlag = 0;
CheckBox chkFlagNew = (CheckBox)gvrRoles.FindControl( "chkEFalg ");
if (chkFlagNew.Checked == true)
iFlag = 1;
bool bFlag = roleDB.UpDateRole(strRoleName, strRoleDes, iFlag,iRoleID);
lbError.Text = strRoleName + "更新成功 ";
gvRoles.EditIndex = -1;
BindRole();
}
}
[解决办法]
更新事件 RowUpdating
model.ID = Convert.ToInt32(GridView.DataKeys[GridView.Rows[e.RowIndex].DataItemIndex].Value.ToString());
获取 ID值
在 html里面 GridView的属性 DataKeyNames= "ID " ID是 表的主键
你试一下
[解决办法]
<asp:GridView ID= "GridView1 " AutoGenerateColumns= "false " runat= "server " OnRowEditing= "GridView1_RowEditing " OnRowUpdating= "GridView1_RowUpdating ">
<Columns>
<asp:BoundField DataField= "test " />
<asp:CommandField ShowEditButton= "True " />
</Columns>
</asp:GridView>
cs:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindData();
}
}
private void BindData()
{
GridView1.DataSource = //...Get DataSource;
GridView1.DataBind();
}
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
BindData();
}
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
string s = ((TextBox)GridView1.Rows[e.RowIndex].Cells[0].Controls[0]).Text;
//update......
GridView1.EditIndex = -1;
BindData();
}
[解决办法]
你在load时候进行数据绑定但是没有判断IsPostBack!
[解决办法]
自己调试进去看里面值得变化啊
[解决办法]
if(!ispostback)
{
}