Bandry的技术博客

人为善,福虽未至,祸已远离;人为恶,祸虽未至,福已远离

博客园 首页 新随笔 联系 订阅 管理
.NET GridView和ObjectDataSource使用时应该注意的一个地方

ObjectDataSource的使用的函数最好将变量名和数据库字段名统一,否则可能会出现错误
虽然有解决办法,但没必要浪费时间去玩那个,不就是变量名吗,无所谓的啦。

如果需要使用ObjectDataSource控件的更新和删除功能,一般是根据主键进行修改的,但是我在使用这个功能的时候,
由于把主键这个字段设置为了readonly(主键不能更新),结果传回去的时候主键值就没有了,后来想了个办法,用
cookieparam作为主键的来源,在gridview或者detailsview控件更新、删除之前(响应事件)将主键值写入cookie,感觉有
点笨,不过功能没什么问题,不知道大家是怎么做的。


编辑后记:
      我发现自己真的很笨耶,晕死了。想要取回主键ID值,不用cookie那么麻烦去做,虽然可以实现功能,但肯定不好。
下面的方法应该才是正确的方法:
   指定GridView或者DetailsView的 DataKeyNames 属性,比如你的主键ID是ID,则指定DataKeyNames"ID"
在objectdatasource或者其他数据源控件指定参数,如下:
            <DeleteParameters>
                <asp:ControlParameter ControlID="DetailsView1" PropertyName="SelectedValue" Type="int32" Name="ID" />
            </DeleteParameters>
            <UpdateParameters>
                <asp:ControlParameter ControlID="DetailsView1" PropertyName="SelectedValue" Type="int32" Name="ID" />
                // 其他参数
             </UpdateParameters>
这样就可以传过去了
下面是我的一些代码:
DetailsView :
        <asp:DetailsView ID="DetailsView1" runat="server" DataKeyNames="ContentID" AutoGenerateRows="False" BackColor="White"
            BorderColor="White" BorderStyle="Ridge" BorderWidth="2px" CellPadding="3" CellSpacing="1"
            DataSourceID="ObjectDataSource2" GridLines="None" Width="70%" RowStyle-HorizontalAlign="left">
            <FooterStyle BackColor="#C6C3C6" ForeColor="Black" />
            <EditRowStyle BackColor="#9471DE" Font-Bold="True" ForeColor="White" />
            <RowStyle BackColor="#DEDFDE" ForeColor="Black" />
            <PagerStyle BackColor="#C6C3C6" ForeColor="Black" HorizontalAlign="Right" />
            <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#E7E7FF" />
            <Fields>
                <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
                <asp:BoundField DataField="ContentID" HeaderText="ID" ReadOnly="True" />
                <asp:BoundField DataField="ContentName" HeaderText="名称" />
                <asp:BoundField DataField="ContentAuthor" HeaderText="作者" />
                <asp:TemplateField HeaderText="关键字">
                    <EditItemTemplate>
                        <asp:TextBox ID="TextBox1" Width="320px" TextMode="multiLine" Rows="5" runat="server" Text='<%# Bind("ContentKeyword") %>'></asp:TextBox>
                    </EditItemTemplate>
                    <InsertItemTemplate>
                        <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("ContentKeyword") %>'></asp:TextBox>
                    </InsertItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("ContentKeyword") %>'></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="SortOrder" HeaderText="排序" />
                <asp:CheckBoxField DataField="IsFree" HeaderText="是否免费" />
                <asp:CheckBoxField DataField="IsVisible" HeaderText="是否可见" />
                <asp:BoundField DataField="ClickHit" HeaderText="点击数" ReadOnly="True" />
                <asp:BoundField DataField="CreateTime" HeaderText="创建日期" ReadOnly="True" />
            </Fields>
        </asp:DetailsView>
  
ObjectDataSource :
      <asp:ObjectDataSource ID="ObjectDataSource2" runat="server" DeleteMethod="deleteContent"
            SelectMethod="getContentDetail" TypeName="ServiceContent" UpdateMethod="updateContent">
            <DeleteParameters>
                <asp:ControlParameter ControlID="DetailsView1" PropertyName="SelectedValue" Type="int32" Name="ContentID" />
            </DeleteParameters>
            <UpdateParameters>
                <asp:ControlParameter ControlID="DetailsView1" PropertyName="SelectedValue" Type="int32" Name="ContentID" />
                <asp:Parameter Name="ContentName" Type="String" />
                <asp:Parameter Name="ContentAuthor" Type="String" />
                <asp:Parameter Name="ContentKeyword" Type="String" />
                <asp:Parameter Name="SortOrder" Type="Int32" />
                <asp:Parameter Name="IsFree" Type="Int32" />
                <asp:Parameter Name="IsVisible" Type="Int32" />
            </UpdateParameters>
            <SelectParameters>
                <asp:QueryStringParameter DefaultValue="0" Name="ContentID" QueryStringField="ContentID"
                    Type="Int32" />
            </SelectParameters>
        </asp:ObjectDataSource>

业务层代码:
    static public DataSet getContent(int CatalogID)
    static public void updateContent(int ContentID, string ContentName, string ContentAuthor, string ContentKeyword, int SortOrder, int IsFree, int IsVisible)
    static public void deleteContent(int ContentID)

posted on 2006-09-13 13:12  Bandry  阅读(1206)  评论(0编辑  收藏  举报