日期:2014-05-18  浏览次数:20561 次

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 基本等于不会使用数据绑定控件