当前位置: 代码迷 >> ASP.NET >> detailsview update有关问题
  详细解决方案

detailsview update有关问题

热度:1710   发布时间:2013-02-25 00:00:00.0
detailsview update问题。
我的一个叫“dvwBook”的DetailsView控件,因为需要,我是用手动去绑定的,没有用DataSource去绑定,所以也无法“无代码”式去实现那些更新,删除等操作。

  protected void Page_Load(object sender, EventArgs e)
  {
  if (!IsPostBack)
  ddlBind();//这个是绑定的函数。
  }

这个DetailsView里面有一些是自动绑定的BoundField,有一些是自己添加的模版,里面有下拉匡等。
这些都成功绑定了。能显示数据且进入时默认是编辑状态。

然后,按更新按钮的程序我就不太会写了。

  protected void dvwBook_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
  {
  。。。。。
  }

网上看到:
tb = (TextBox)(DetailsView1.Rows[3].FindControl("TextBox4"));
这样可以取得模板里面自己添加的textbox控件的值,然后用SQL自己更新就行了。
但如果是那行是自动绑定的BoundField应该FindControl什么呢?BoundField也好像没有什么ID。
或者是有什么其它方法方便些?

第一次用DetailsView,各方面都不是很了解,高手指教一下。

------解决方案--------------------------------------------------------
用ItemTemplate手动控制用什么控件显示什么。以Northwind数据库的Products表的ProductID, ProductName, UnitPrice三个列的更新为例,
AutoGenerateRows设为false,在ItemTemplate内放置TextBox,也就是和默认编辑状态一样。
加一个CommandName为Wahaha的Button。

HTML code
<asp:DetailsView ID="DetailsView1" runat="server"             AutoGenerateRows="false"                         onitemcommand="DetailsView1_ItemCommand">            <Fields>                <asp:TemplateField>                    <HeaderTemplate>                        商品ID:                    </HeaderTemplate>                    <ItemTemplate>                        <asp:Label ID="LabelProductID" Text='<%# Eval("ProductID") %>' runat="server" />                    </ItemTemplate>                </asp:TemplateField>                <asp:TemplateField>                    <HeaderTemplate>                        商品名:                    </HeaderTemplate>                    <ItemTemplate>                        <asp:TextBox ID="TextBoxProductName" Text='<%# Bind("ProductName") %>' runat="server" />                    </ItemTemplate>                </asp:TemplateField>                <asp:TemplateField>                    <HeaderTemplate>                        价格:                    </HeaderTemplate>                    <ItemTemplate>                        <asp:TextBox ID="TextBoxUnitPrice" Text='<%# Bind("UnitPrice") %>' runat="server" />                    </ItemTemplate>                </asp:TemplateField>                <asp:TemplateField>                    <ItemTemplate>                        <asp:Button ID="UpdateBtn" Text="更新" CommandName="Wahaha" runat="server" />                    </ItemTemplate>                </asp:TemplateField>            </Fields>        </asp:DetailsView>
------解决方案--------------------------------------------------------
如果你用的是BoundField,应该要使用Controls[索引]去访问,这样是非常不正规的做法,强烈建议使用TemplateField 

而且不会使用TemplateField 基本等于不会使用数据绑定控件
  相关解决方案