【问题标题】:how to show values from database in a dropdownlist which is inside a gridview?如何在网格视图内的下拉列表中显示数据库中的值?
【发布时间】:2014-11-26 08:33:53
【问题描述】:

我正在尝试将值从数据库获取到放置在 gridview 项目模板中的下拉列表。我正在使用 gridview 从用户那里获取值。在一个列中,我使用下拉列表,用户必须从中选择一个项目。根据选择,其成本价格将自动填充到另一列。但我无法获取下拉列表中的值并收到错误“对象引用未设置为对象的实例。”

下面给出的aspx代码:

<asp:GridView ID="gvItemList" runat="server" ShowFooter="True" AutoGenerateColumns="False" AutoGenerateDeleteButton="True" BackColor="#CCCCCC" BorderColor="#999999" BorderStyle="Solid" BorderWidth="3px" CellPadding="4" CellSpacing="2" ForeColor="Black" ViewStateMode="Enabled" CssClass="newStyle9" style="text-align: center" OnRowDeleting="gvItemList_RowDeleting" OnRowDataBound="gvItemList_RowDataBound">
    <Columns>
        <asp:TemplateField HeaderText="Sl No" SortExpression="Id">                                    
                                    <ItemTemplate>
                                        <asp:Label ID="lblId" runat="server"
                                            Text='<%# Container.DataItemIndex+1 %>'></asp:Label>
                                    </ItemTemplate>
                                </asp:TemplateField>
         <asp:TemplateField HeaderText="Item">
             <ItemTemplate>
                 <asp:DropDownList ID="ddlItem" runat="server" Height="25px" Width="128px">
                 </asp:DropDownList>
             </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Required Date">
            <ItemTemplate>
                <asp:TextBox ID="txtRequiredDate" runat="server" />
                <ajaxToolkit:CalendarExtender ID="txtRequiredDate_CalendarExtender" runat="server" Enabled="True" TargetControlID="txtRequiredDate">
                </ajaxToolkit:CalendarExtender>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Required Quantity">
            <ItemTemplate>
                <asp:TextBox ID="txtRequiredQuantity" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Cost Price">
            <ItemTemplate>
                <asp:Label ID="lblCostPrice" runat="server"></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>        
        <asp:TemplateField HeaderText="Total">
            <ItemTemplate>
                <asp:Label ID="lblTotal" runat="server"></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="UoM Code">
            <ItemTemplate>
                <asp:Label ID="lblUomCode" runat="server">Manual</asp:Label>

            </ItemTemplate>
            <FooterStyle HorizontalAlign="Right" />
            <FooterTemplate>
                <asp:Button ID="AddRowButton" runat="server" Text="Add New Item" 
                    OnClick="ButtonAdd_Click" />
            </FooterTemplate>

        </asp:TemplateField>
    </Columns>
    <FooterStyle BackColor="#CCCCCC" />
    <HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" />
    <PagerStyle BackColor="#CCCCCC" ForeColor="Black" HorizontalAlign="Left" />
    <RowStyle BackColor="White" />
    <SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
    <SortedAscendingCellStyle BackColor="#F1F1F1" />
    <SortedAscendingHeaderStyle BackColor="#808080" />
    <SortedDescendingCellStyle BackColor="#CAC9C9" />
    <SortedDescendingHeaderStyle BackColor="#383838" />
</asp:GridView>

row databound 下的代码如下:

protected void gvItemList_RowDataBound(object sender, GridViewRowEventArgs e)
    {        
        DS_SiteDataTableAdapters.tbl_ItemTableAdapter item;
        item = new DS_SiteDataTableAdapters.tbl_ItemTableAdapter();
        DataTable dt = new DataTable();
        dt = item.GetItem();

        DropDownList ddlItem = (DropDownList)e.Row.FindControl("ddlItem");

        ddlItem.DataSource = dt; //here I'm getting an error "Object reference not set to an instance of an object."
        ddlItem.DataTextField = "Item";
        ddlItem.DataValueField = "Item";
        ddlItem.DataBind();        
    }

非常感谢任何帮助!

【问题讨论】:

  • 您遇到了什么错误?什么不起作用?
  • 现在我收到一个错误“对象引用未设置为对象的实例。”而且我无法从数据库中获取值到下拉列表
  • 你试过调试看看是哪一行报错了吗?
  • 我已经更新了我的问题看看。
  • 您正在尝试使用空对象,就好像它是正确引用的对象一样。

标签: c# asp.net gridview drop-down-menu


【解决方案1】:
if (e.Row.RowType == DataControlRowType.DataRow)
{
    //Find the DropDownList in the Row
    DropDownList ddlCountries = (e.Row.FindControl("ddlCountries") as DropDownList);
    ddlCountries.DataSource = GetData("SELECT DISTINCT Country FROM Customers");
    ddlCountries.DataTextField = "Country";
    ddlCountries.DataValueField = "Country";
    ddlCountries.DataBind();

    //Add Default Item in the DropDownList
    ddlCountries.Items.Insert(0, new ListItem("Select Country"));
}

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    只需在您的方法中检查以下条件

    if (e.Row.RowType == DataControlRowType.DataRow)
    
    
            { your code }
    

    希望对你有帮助

    【讨论】:

    • 谢谢...!这个答案帮助我解决了问题...:)
    【解决方案3】:

    如 cmets 中所述,您正在尝试使用空对象,并认为它具有引用的对象。

    你正在做这样的事情:

    public class Example
    {
       public void MyMethod()
       {
    
       }
    }
    
    Example myExample= null;
    myExample.MyMethod();
    

    您将得到"Object reference not set to an instance of an object.",它与NullReferenceException 相同,因为您在为空的引用类型上调用方法。

    【讨论】:

      【解决方案4】:

      您收到Object Reference 错误,因为您没有在gridview 中检查DataRow。因此,它试图在不存在的标题中找到下拉菜单,因此您将 Dropdown 对象设为 Null。

      将此条件添加到您的 gvItemList_RowDataBound 事件中:-

      protected void gvItemList_RowDataBound(object sender, GridViewRowEventArgs e)
      { 
      if (e.Row.RowType == DataControlRowType.DataRow)
         {
            //Your rest code
         }
      }
      

      【讨论】:

        【解决方案5】:

        试试这个你会得到空引用,因为你找不到 ddlItem 控件

        在线 DropDownList ddlItem = (DropDownList)e.Row.FindControl("ddlItem");

        所以你可以尝试如下 DropDownList ddlItem = (DropDownList)GridView.Rows[rowindex].FindControl("ddlItem"))

        【讨论】:

        • 其实这个没有编辑模式。当页面加载时,gridview 将显示一个空行。在该行中,用户必须插入值。由于没有编辑模式,因此不会发生任何事件,因此无法获取行索引。
        猜你喜欢
        • 1970-01-01
        • 2013-03-09
        • 1970-01-01
        • 1970-01-01
        • 2011-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多