GridView嵌套gridview,实现子(从)gridview的编辑更新等操作

grace9 2011-03-18 03:45:05
如何在 子gridview中实现 编辑更新等操作?每次更新一条记录。删除已完成。主要代码部分如下。前端

<asp:GridView ID="gvclassexam" runat="server"
onrowdatabound="gvclassexam_RowDataBound" AutoGenerateColumns="False">
<Columns>
<asp:TemplateField HeaderText="科目">
<ItemTemplate>
<asp:CheckBox ID="cb_class" runat="server"
Text="<%# Bind('cs_name') %>" />
</ItemTemplate>
<ItemStyle Width="160px" />
</asp:TemplateField>
<asp:TemplateField HeaderText="考试">
<ItemTemplate>
<asp:GridView ID="gvexam" runat="server" AutoGenerateColumns="False"
onrowdeleting="gvexam_RowDeleting"
onrowediting="gvexam_RowEditing"
OnRowUpdating = "gvexam_RowUpdating"
OnRowCancelingEdit ="gvexam_RowCancelingEdit">
<Columns>
<asp:TemplateField HeaderText="考试名称">
<EditItemTemplate>
<asp:TextBox ID="tbe_name" runat="server" Text="<%# Bind('e_name') %>"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lbe_name" runat="server" Text="<%# Bind('e_name') %>"></asp:Label>
</ItemTemplate>
<ItemStyle Width="100px" />
</asp:TemplateField>

<asp:TemplateField HeaderText="教室">
<EditItemTemplate>
<asp:TextBox ID="tbe_room" runat="server" Text="<%# Bind('e_room') %>"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lbe_room" runat="server" Text="<%# Bind('e_room') %>"></asp:Label>
</ItemTemplate>
<ItemStyle Width="200px" />
</asp:TemplateField>
<asp:CommandField ShowEditButton="True" ButtonType="Image"
EditImageUrl="~/ButtonImages/edit.gif" UpdateImageUrl="Images/savebtn.png" CancelImageUrl="Images/cancel.png" >
<ItemStyle Width="20px" />
</asp:CommandField>
<asp:CommandField ShowDeleteButton="True"
DeleteImageUrl="Images/delete.gif" ButtonType="Image">
<ItemStyle Width="20px" />
</asp:CommandField>
</Columns>
</asp:GridView>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>


后台:

protected void Page_Load(object sender, EventArgs e)
{
OperateSql op = new OperateSql(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
DataTable dt = op.GetData("select * from classes order by cs_name");
this.gvclassexam.DataSource = dt;
this.gvclassexam.DataKeyNames = new string[] { "cs_no" };
this.gvclassexam.DataBind();
}
protected void gvclassexam_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowIndex >= 0)
{
OperateSql op = new OperateSql(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
DataTable dt = op.GetData("select * from exams where e_class='" + gvclassexam.DataKeys[e.Row.RowIndex].Value.ToString() + "'");
GridView g = (GridView)e.Row.FindControl("gvexam");
g.DataSource = dt;
g.DataKeyNames = new string[] { "e_no" };
g.DataBind();
}
}
protected void gvexam_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
OperateSql op = new OperateSql(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
GridView a = (GridView)sender;
op.UpdateDataSoures("delete from exams where e_no='" + a.DataKeys[e.RowIndex].Value.ToString() + "'");
Response.Redirect("AddExam.aspx");
}
protected void gvexam_RowEditing(object sender, GridViewEditEventArgs e)
{
OperateSql op = new OperateSql(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
GridView a = (GridView)sender;
a.EditIndex = e.NewEditIndex;
}
protected void gvexam_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
OperateSql op = new OperateSql(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
GridView a = (GridView)sender;
SqlParameter[] param = new SqlParameter[]
{
new SqlParameter("e_name",((TextBox)a.Rows[e.RowIndex].FindControl("tbe_name")).Text),
new SqlParameter("e_room",((TextBox)a.Rows[e.RowIndex].FindControl("tbe_room")).Text),
};
string cmd = "update exams set e_name=@e_name,e_room =@e_room where e_no='" + a.DataKeys[e.RowIndex].Value.ToString() + "'";
op.UpdateDataSoures(cmd, param);
}
protected void gvexam_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
OperateSql op = new OperateSql(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
GridView a = (GridView)sender;
a.EditIndex = -1;
}
...全文
362 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jerrycgc 2011-12-23
  • 打赏
  • 举报
回复
经验证,EDIT需点击两次才有效,困扰啊,楼主快想办法
子夜__ 2011-03-18
  • 打赏
  • 举报
回复
[Quote=引用楼主 grace9 的回复:]
如何在 子gridview中实现 编辑更新等操作?每次更新一条记录。删除已完成。主要代码部分如下。前端
C# code

<asp:GridView ID="gvclassexam" runat="server"
onrowdatabound="gvclassexam_RowDataBound" AutoGenerateColumns="False">
……
[/Quote]
protected void gvexam_RowEditing(object sender, GridViewEditEventArgs e)
{
OperateSql op = new OperateSql(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
GridView a = (GridView)sender;
a.EditIndex = e.NewEditIndex;
}
中的
OperateSql op = new OperateSql(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);这行代码没用。



直接这样更新不行吗?比如
 protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
string Index = this.GridView1.DataKeys[e.RowIndex].Value.ToString();
string StartTime = (this.GridView1.Rows[e.RowIndex].FindControl("Txt_CreateDateST01") as HtmlInputText).Value.Trim();
string EndTime = (this.GridView1.Rows[e.RowIndex].FindControl("Txt_CreateDateST02") as HtmlInputText).Value.Trim();
bool AllowApp;
CheckBox ckb = this.GridView1.Rows[e.RowIndex].FindControl("Cbxallow") as CheckBox;
if (ckb.Checked == true)
{
AllowApp = true;
}
else
{
AllowApp = false;
}
try
{
bool flag = new M_BLL.T_Admin().UpdateLevelApp(Index, StartTime, EndTime, AllowApp);
if (flag)
{
ScriptManager.RegisterClientScriptBlock(UpdatePanel1, this.GetType(), "click", "alert('修改成功!')", true);
}
else
{
ScriptManager.RegisterClientScriptBlock(UpdatePanel1, this.GetType(), "click", "alert('请确保输入信息正确!')", true);
}
}
catch
{
ScriptManager.RegisterClientScriptBlock(UpdatePanel1, this.GetType(), "click", "alert('数据库有问题请联系管理员!')", true);
}

this.GridView1.EditIndex = -1;
GvBind();
}
strife013 2011-03-18
  • 打赏
  • 举报
回复
点击两次?是不是事件绑定的问题,可以调试看看
grace9 2011-03-18
  • 打赏
  • 举报
回复
想问大家 为什么 上述代码运行中 需点击两次子gridview的编辑才出现更新效果?

62,051

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧