Gridview自带的编辑功能问题

Dream_Hunter_ 2009-08-09 02:51:08
我用GridView添加了选择、编辑和删除列,但预览时我点一下编辑,毫无反应,没显示“更新”、取消,再点一下,弹出删除提示。。。
选择有什么作用?就用于之后对选择的列进行操作吗?
以下是我的代码,请前辈看一下。


<asp:GridView ID="gdv" runat="server" AutoGenerateColumns="False" BackColor="White"
BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="3" OnDataBound="gdv_DataBound" OnRowDeleting="gdv_RowDeleting" OnRowEditing="gdv_RowEditing" OnRowCancelingEdit="gdv_RowCancelingEdit" OnRowUpdating="gdv_RowUpdating">
<FooterStyle BackColor="White" ForeColor="#000066" />
<RowStyle ForeColor="#000066" />
<Columns>
<asp:BoundField DataField="su_Name" HeaderText="名 称" >
<HeaderStyle CssClass="gdvtop" />
</asp:BoundField>
<asp:BoundField DataField="su_Address" HeaderText="地 址" >
<HeaderStyle CssClass="gdvtop" />
</asp:BoundField>
<asp:BoundField DataField="su_Contact" HeaderText="联系人" >
<HeaderStyle CssClass="gdvtop" />
</asp:BoundField>
<asp:BoundField DataField="su_Phone" HeaderText="联系电话" >
<HeaderStyle CssClass="gdvtop" />
</asp:BoundField>
<asp:BoundField DataField="su_MobilePhone" HeaderText="移动电话" >
<HeaderStyle CssClass="gdvtop" />
</asp:BoundField>
<asp:BoundField DataField="su_Remark" HeaderText="备 注" >
<HeaderStyle CssClass="gdvtop" />
</asp:BoundField>
<asp:CommandField HeaderText="选择" ShowSelectButton="True" >
<HeaderStyle CssClass="gdvtop" />
</asp:CommandField>
<asp:CommandField HeaderText="编辑" ShowEditButton="True" >
<HeaderStyle CssClass="gdvtop" />
</asp:CommandField>
<asp:CommandField HeaderText="删除" ShowDeleteButton="True" >
<HeaderStyle CssClass="gdvtop" />
</asp:CommandField>
</Columns>
<PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" />
<SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />
</asp:GridView>


后台代码

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bind();
}
gdv.Attributes.Add("bordercolor", "B8B3B3");
}
private void bind()
{
SupplierBLL subll = new SupplierBLL();
DataTable dt = subll.GetAllSupplier();
gdv.DataSource = dt;
gdv.DataKeyNames = new string[] { "su_ID" };
gdv.DataBind();
}
protected void gdv_RowEditing(object sender, GridViewEditEventArgs e)
{
gdv.EditIndex = e.NewEditIndex;
}
protected void gdv_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
SupplierBLL subll = new SupplierBLL();
int suID = int.Parse(gdv.DataKeys[e.RowIndex].Value.ToString());
int res = subll.DelSupplier(suID);
if (res <= 0)
{
Response.Write("<script>alert('此供应商记录被其它信息引用,无法删除。')</script>");
}
bind();
}
protected void gdv_DataBound(object sender, EventArgs e)
{
for (int i = 0; i < gdv.Rows.Count; i++)
{
gdv.Rows[i].Cells[8].Attributes.Add("onclick", "return confirm('确定删除吗?')");
}
}
protected void gdv_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
SupplierInfo suinfo = new SupplierInfo(int.Parse(gdv.DataKeys[e.RowIndex].Value.ToString()), ((TextBox)(gdv.Rows[e.RowIndex].Cells[0].Controls[0])).Text.ToString().Trim(), ((TextBox)(gdv.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim(), ((TextBox)(gdv.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString().Trim(), ((TextBox)(gdv.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString().Trim(), ((TextBox)(gdv.Rows[e.RowIndex].Cells[4].Controls[0])).Text.ToString().Trim(), ((TextBox)(gdv.Rows[e.RowIndex].Cells[5].Controls[0])).Text.ToString().Trim());
SupplierBLL subll = new SupplierBLL();
bind();
}
protected void gdv_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
gdv.EditIndex = -1;
}
...全文
611 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhw626033518 2009-11-10
  • 打赏
  • 举报
回复
学习了
gangzi002 2009-10-07
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 dream_hunter_ 的回复:]
引用 13 楼 zq32206124 的回复:
引用 12 楼 dream_hunter_ 的回复:
谢谢各位。再问个问题,我点击编辑后,单元格里变成编辑框,但编辑框太长,影响美观。有没有什么方法能将编辑框的长度控制和原来的单元格一样长?

你用的哪个方法啊?


我点编辑之后,girdview就整体变长了,被编辑框撑大了
[/Quote]
这个文本框也能改width么?
zq32206124 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 dream_hunter_ 的回复:]
引用 16 楼 zq32206124 的回复:
<asp:TextBox ID="TBScaleModel" runat="server" Text=' <%# Eval("ScaleModel")%>' CssClass="TBinput"
                                                                       Width="40px"> </asp:TextBox>



这里的TextBox是我点击编辑后出来的,我没写。
[/Quote]
额~~那你最好照着我上面的代码写,那样的话可以改变宽度。
Dream_Hunter_ 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 zq32206124 的回复:]
<asp:TextBox ID="TBScaleModel" runat="server" Text=' <%# Eval("ScaleModel")%>' CssClass="TBinput"
                                                                       Width="40px"> </asp:TextBox>

[/Quote]

这里的TextBox是我点击编辑后出来的,我没写。
zq32206124 2009-08-09
  • 打赏
  • 举报
回复
<asp:TextBox ID="TBScaleModel" runat="server" Text='<%# Eval("ScaleModel")%>' CssClass="TBinput"
Width="40px"></asp:TextBox>
zq32206124 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 dream_hunter_ 的回复:]
引用 13 楼 zq32206124 的回复:
引用 12 楼 dream_hunter_ 的回复:
谢谢各位。再问个问题,我点击编辑后,单元格里变成编辑框,但编辑框太长,影响美观。有没有什么方法能将编辑框的长度控制和原来的单元格一样长?

你用的哪个方法啊?


我点编辑之后,girdview就整体变长了,被编辑框撑大了
[/Quote]
你改一下文本框的Width
Dream_Hunter_ 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zq32206124 的回复:]
引用 12 楼 dream_hunter_ 的回复:
谢谢各位。再问个问题,我点击编辑后,单元格里变成编辑框,但编辑框太长,影响美观。有没有什么方法能将编辑框的长度控制和原来的单元格一样长?

你用的哪个方法啊?
[/Quote]

我点编辑之后,girdview就整体变长了,被编辑框撑大了
zq32206124 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 dream_hunter_ 的回复:]
谢谢各位。再问个问题,我点击编辑后,单元格里变成编辑框,但编辑框太长,影响美观。有没有什么方法能将编辑框的长度控制和原来的单元格一样长?
[/Quote]
你用的哪个方法啊?
Dream_Hunter_ 2009-08-09
  • 打赏
  • 举报
回复
谢谢各位。再问个问题,我点击编辑后,单元格里变成编辑框,但编辑框太长,影响美观。有没有什么方法能将编辑框的长度控制和原来的单元格一样长?
zq32206124 2009-08-09
  • 打赏
  • 举报
回复
用说的可能不太明白,给你贴段代码,自己看看吧,我这个跟你那个帮定方法不太一样,有个缺点是取值时用Columns[Index]取不到。可以用FindControl


<asp:GridView ID="gvBOM" runat="server" ShowHeader="false" Style="margin: 0px; padding: 0px;
background-color: #DAE7EF" Width="100%" AutoGenerateColumns="False" DataKeyNames="BillOfMaterialsID"
OnRowEditing="gvBOM_RowEditing" OnRowUpdating="gvBOM_RowUpdating" OnRowCancelingEdit="gvBOM_RowCancelingEdit"
OnRowDeleting="gvBOM_RowDeleting" OnRowCreated="gvBOM_RowCreated">
<Columns>
<asp:TemplateField HeaderText="原料名称">
<ItemTemplate>
<%# Eval("ProductCat")%>
</ItemTemplate>
<ItemStyle HorizontalAlign="Left" Width="120px" />
<HeaderStyle HorizontalAlign="Center" Font-Bold="false" Width="120px" />
</asp:TemplateField>
<asp:TemplateField HeaderText="原料规格">
<ItemTemplate>
<%# Eval("YarnCount")%>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TBBOMYarnCount" runat="server" Text='<%# Eval("YarnCount")%>' CssClass="TBinput"
Width="100px"></asp:TextBox>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Right" Width="100px" />
<HeaderStyle HorizontalAlign="Center" Font-Bold="false" Width="50px" />
</asp:TemplateField>
<asp:TemplateField HeaderText="成分比例">
<ItemTemplate>
<%# Eval("ScaleModel")%>%
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TBScaleModel" runat="server" Text='<%# Eval("ScaleModel")%>' CssClass="TBinput"
Width="40px"></asp:TextBox>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Right" Width="50px" />
<HeaderStyle HorizontalAlign="Center" Font-Bold="false" Width="50px" />
</asp:TemplateField>
<asp:CommandField ShowEditButton="True" />
<asp:CommandField ShowDeleteButton="True" DeleteText="<div id="de" onclick="JavaScript:return confirm('确定删除吗?')">删除</div> " />
</Columns>
<EditRowStyle BackColor="#DAE7EF" />
<PagerStyle BorderStyle="Outset" />
</asp:GridView>


有EditItemTemplate标签,编辑才会有效。

后台

protected void gvBOM_RowEditing(object sender, GridViewEditEventArgs e)
{
ProductCat myProductCat = new ProductCat();
gvBOM.EditIndex = e.NewEditIndex;
int OrdersDetailID=Int32.Parse(HidDetailID.Value);
Orders myOrders = new Orders();
DataSet dsBOM = myOrders.Get_OrdersDetailBOMByOrdersDetaiID_List(OrdersDetailID);
gvBOM.DataSource = dsBOM.Tables[0];
gvBOM.DataBind();
}
protected void gvBOM_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
//此处执行更新操作
gvBOM_DataBind(CurOrdersDetailID); //重新帮定GridView
gvBOM.EditIndex = -1;
}
protected void gvBOM_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
gvBOM.EditIndex = -1;
int OrdersDetailID = Int32.Parse(HidDetailID.Value);
gvBOM_DataBind(OrdersDetailID);//重新帮定GridView
}
protected void gvBOM_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
//此处执行删除操作
gvBOM_DataBind(CurOrdersDetailID);//重新帮定
}



上面具体的操作部分给你省略掉了。
wuyq11 2009-08-09
  • 打赏
  • 举报
回复
<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>
protected void gv_RowEditing(object sender, GridViewEditEventArgs e)
{
gv.EditIndex =e.NewEditIndex;
bind();
}
protected void gv_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
gv.EditIndex = e.RowIndex;


gv.EditIndex = -1;
bind();
}

protected void gv_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
gv.EditIndex = -1;
bind();
}
hackervip1988 2009-08-09
  • 打赏
  • 举报
回复
protected void gdv_RowEditing(object sender, GridViewEditEventArgs e)
{
gdv.EditIndex = e.NewEditIndex;
}
这样设置 只是进入编辑模式
进入编辑 模式后 有两种状态 更新,取消
cpp2017 2009-08-09
  • 打赏
  • 举报
回复
同样要加bind()
Dream_Hunter_ 2009-08-09
  • 打赏
  • 举报
回复
是啊。没想到。呵呵。
hackervip1988 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dream_hunter_ 的回复:]
谢谢楼上的二位。
如何点击更新后,自动退出编辑状态?就是不显示编辑框?
[/Quote]
设置
gdv.EditIndex=-1;
在更新事件中加入
这样可以推出
Dream_Hunter_ 2009-08-09
  • 打赏
  • 举报
回复
谢谢楼上的二位。
如何点击更新后,自动退出编辑状态?就是不显示编辑框?
xml120 2009-08-09
  • 打赏
  • 举报
回复

protected void gdv_RowEditing(object sender, GridViewEditEventArgs e)
{
gdv.EditIndex = e.NewEditIndex;
}



除了设置编辑列索引外,还要重新绑定。才能显示你的数据。

所以在绑定GridView的数据源的时候。不能用绑定列BoundField。

用模板列绑定。然后设置ItemTemplate为显示的内容。

EditTemplate可以放文本框等。在编辑的时候显示内容。

可以进行编辑,更新。
cpp2017 2009-08-09
  • 打赏
  • 举报
回复
选择有什么作用?就用于之后对选择的列进行操作吗?
===>
选择后,可以使. GridView.SelectedRow得到值.
cpp2017 2009-08-09
  • 打赏
  • 举报
回复
必须要绑定,只有绑定后才会根据你当前的EditIndex生成相应的界面.
Dream_Hunter_ 2009-08-09
  • 打赏
  • 举报
回复
我在gdv_RowEditing里再加上bind()
gdv_RowUpdating里加上subll.AlterSupplier(suinfo);
就好了
为什么RowEditing还要重新绑定?

62,046

社区成员

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

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

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

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