读书人

detailsview update有关问题

发布时间: 2012-02-17 17:50:42 作者: rapoo

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

读书人网 >asp.net

热点推荐