datagrid中DropDownList绑定Dataset 的探究 未将对象引用设置到对象的实例 错误

来源:互联网 发布:mac 10.13 vmtools 编辑:程序博客网 时间:2024/05/16 17:30

致歉,由于分类变动疏忽造成部分丢失,现补上

 

 

datagrid中DropDownList绑定Dataset 首先要增加OnItemDataBound事件

 

OnItemDataBound="MyDataGrid_Bound"

 

                    <asp:DataGrid CssClass="Heder" ID="MyDataGrid" runat="server" align="center" AutoGenerateColumns="False"
                            BorderStyle="Ridge" DataKeyField="selfid" AllowPaging="True" PageSize="30" PagerStyle-Mode="NumericPages"
                            PagerStyle-HorizontalAlign="Right" PagerStyle-NextPageText="下一页" PagerStyle-PrevPageText="上一页"
                            OnPageIndexChanged="MyDataGrid_Page" BorderWidth="1px" Width="100%" OnUpdateCommand="MyDataGrid_Update"
                            OnCancelCommand="MyDataGrid_Cancel" OnEditCommand="MyDataGrid_Edit" OnItemDataBound="MyDataGrid_Bound">
                            <SelectedItemStyle CssClass="SelectedItemStyle"></SelectedItemStyle>
                            <ItemStyle CssClass="ItemStyle"></ItemStyle>
                            <HeaderStyle CssClass="HeaderStyle"></HeaderStyle>
                            <AlternatingItemStyle CssClass="AlternatingItemStyle"></AlternatingItemStyle>
                            <PagerStyle CssClass="PagerStyle" HorizontalAlign="Right" Mode="NumericPages" NextPageText="下一页"
                                PrevPageText="上一页"></PagerStyle>
                            <Columns>
                                <asp:TemplateColumn HeaderText="原料类型">
                                    <ItemStyle Wrap="False" HorizontalAlign="Center"></ItemStyle>
                                    <ItemTemplate>
                                        <asp:Label runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Yllxmc") %>'
                                            Style="width: 25; height: 18" ID="Yllxm" />
                                    </ItemTemplate>
                                    <EditItemTemplate>
                                        <asp:DropDownList ID="edit_oYllxID" runat="server" Style="width: 100%; height: 18">
                                        </asp:DropDownList>
                                        <asp:HiddenField ID="hid_oYllxID" runat="server" Value='<%# DataBinder.Eval(Container.DataItem, "YllxID") %>' />
                                    </EditItemTemplate>
                                </asp:TemplateColumn>
                            </Columns>
                        </asp:DataGrid>

 

        //从数据库中取数据向DropDownList中填充
        protected void MyDataGrid_Bound(object sender, DataGridItemEventArgs e)
        {
                DataSet DS = new DataSet();
                string selectCommond;
                StringBuilder sqlStringBuilder = new StringBuilder();
                DropDownList templist = (DropDownList)e.Item.FindControl("edit_oYllxID");
                HiddenField yllxid = (HiddenField)e.Item.FindControl("hid_oYllxID");

                sqlStringBuilder.Append("  select 0 as selfid,'请选择...' as Yllxmc ");
                sqlStringBuilder.Append(" union all ");
                sqlStringBuilder.Append("  select selfid,Yllxmc ");
                sqlStringBuilder.Append(" from  Cggl_Yllx");
                sqlStringBuilder.Append(" WHERE Kybj=1 ");
                sqlStringBuilder.Append(" order by selfid,Yllxmc ");
                selectCommond = sqlStringBuilder.ToString();

                dataBaseControl.Get_Ds(selectCommond, DS, "Yllx");

                templist.DataSource = DS.Tables["Yllx"];
                templist.DataTextField = "Yllxmc";
                templist.DataValueField = "selfid";
                templist.DataBind();
                templist.SelectedValue = yllxid.Value.Trim();
        }

这时会在页面加载时报 未将对象引用设置到对象的实例 错误

因为在加载时,不是编辑状态,这时DropDownList 还未被在创建,

只需作如下变动

        //从数据库中取数据向DropDownList中填充
        protected void MyDataGrid_Bound(object sender, DataGridItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.EditItem)
            {

                DataSet DS = new DataSet();
                string selectCommond;
                StringBuilder sqlStringBuilder = new StringBuilder();
                DropDownList templist = (DropDownList)e.Item.FindControl("edit_oYllxID");
                HiddenField yllxid = (HiddenField)e.Item.FindControl("hid_oYllxID");

                sqlStringBuilder.Append("  select 0 as selfid,'请选择...' as Yllxmc ");
                sqlStringBuilder.Append(" union all ");
                sqlStringBuilder.Append("  select selfid,Yllxmc ");
                sqlStringBuilder.Append(" from  Cggl_Yllx");
                sqlStringBuilder.Append(" WHERE Kybj=1 ");
                sqlStringBuilder.Append(" order by selfid,Yllxmc ");
                selectCommond = sqlStringBuilder.ToString();

                dataBaseControl.Get_Ds(selectCommond, DS, "Yllx");

                templist.DataSource = DS.Tables["Yllx"];
                templist.DataTextField = "Yllxmc";
                templist.DataValueField = "selfid";
                templist.DataBind();
                templist.SelectedValue = yllxid.Value.Trim();
            }
        }