protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
int id = int.Parse(GridView1.DataKeys[0].Value.ToString());
int power = int.Parse(((DropDownList)GridView1.Rows[e.RowIndex].FindControl("DropDownList1")).Text.ToString());
string username = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox1")).Text.ToString();
string password = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox2")).Text.ToString();
string questions = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox3")).Text.ToString();
string answer = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox4")).Text.ToString();
string status = ((TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox5")).Text.ToString();
string sql = "update t_user set username='" + username + "',password='" + password + "',questions='" + questions + "',answer='" + answer + "',status='" + status + "',[power]=" + power + " where userid=" + id + "";
kd.ExecuteSql(sql);
//GridView1.DataBind();
}
kd.ExecuteSql(sql);是执行sql语句,断点可以看到power这个字段是已经被更改了,但是之后又变回null
除了power用Eval,其他绑定的都是用Bind
有没办法可以让它更新成功?
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{ TextBox tb = (TextBox)GridView1.Rows[e.RowIndex].FindControl("TextBox001");
string dkvalue = GridView1.DataKeys[e.RowIndex].Value.ToString();
string sql1 = "update A set name='" + tb.Text.ToString() + "' where id='" + dkvalue + "'";
conn.Open();
SqlCommand cmd = new SqlCommand(sql1, conn);
cmd.ExecuteNonQuery();
conn.Close();
GridView1.EditIndex = -1;
BindData();
}
在其他字段上,包括id,都没有[].
kd.ExecuteSql(sql);
是执行到数据库里面的吗?应该可以啊。
GridView1.DataBind();
需要重新取数据再执行GridView1.DataBind();
要使用if(!ispostback)
BorderColor="#9DB6DF" BorderWidth="0px" datakeynames="PId"
AutoGenerateColumns="False" onrowdatabound="gv_RowDataBound"
onrowdeleting="gv_RowDeleting"
onrowediting="gv_RowEditing"
onrowcancelingedit="gv_RowCancelingEdit"
onrowupdating="gv_RowUpdating">
<AlternatingRowStyle CssClass="Alternatingback"></AlternatingRowStyle>
<RowStyle CssClass="griditem"></RowStyle>
<HeaderStyle CssClass="gridheader"></HeaderStyle>
<Columns>
<asp:TemplateField HeaderText="名 称">
<HeaderStyle Width="25%"></HeaderStyle>
<ItemStyle HorizontalAlign="Center" />
<ItemTemplate>
<%# Eval("Desc") %>
</ItemTemplate>
<EditItemTemplate >
<asp:TextBox id="txt_Desc" CssClass="inputText" MaxLength="100" runat="server" Text='<%# Eval("Desc") %>' Width="86%">
</asp:TextBox>
<asp:RequiredFieldValidator ID="rfv" runat="server" ErrorMessage="*" ControlToValidate="txt_Desc"></asp:RequiredFieldValidator>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="操作" ItemStyle-HorizontalAlign="Center" ShowHeader="False">
<HeaderStyle Width="20%"></HeaderStyle>
<EditItemTemplate>
<asp:LinkButton ID="LinkButton5" runat="server" CausesValidation="True" CommandName="update">保存</asp:LinkButton>
<asp:LinkButton ID="LinkButton4" runat="server" CausesValidation="False" CommandName="cancel">取消</asp:LinkButton>
</EditItemTemplate>
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CommandName="edit" CausesValidation="false" OnClientClick="return confirm('确认要编辑吗?');">编辑</asp:LinkButton>
<asp:LinkButton ID="LinkButton2" runat="server" CommandName="delete" CausesValidation="False" OnClientClick="return confirm('确认要删除吗?');">删除</asp:LinkButton>
<asp:LinkButton ID="LinkButton3" runat="server" CommandName="Select" CausesValidation="False" Visible="false" >选取</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<EmptyDataTemplate >
<tD>名 称</tD>
<td>操 作</td>
</EmptyDataTemplate>
<EmptyDataRowStyle CssClass="gridheader" />
</asp:gridview> protected void gv_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
gv.EditIndex = e.RowIndex;
int id = int.Parse(gv.DataKeys[e.RowIndex].Value.ToString());
string strDesc =((TextBox)gvp.Rows[e.RowIndex].FindControl("txt_Desc")).Text.Trim();
//更新数据
gv.EditIndex = -1;
BindData();
}
BindData(); 加不加结果都是一样
还有.page_load里面是没代码的....数据源是用datasoures配置的
初步推测是Eval()单向传输数据,所以无法更新
应该就可以了