'ddlItem'有一个SelectedValue,它是无效的,因为它在项目列表中不存在。参数名称:value

时间:2015-03-16 07:13:00

标签: c# asp.net gridview

每当我尝试在gridview下拉列表中绑定数据时,我都会收到此错误。

这是aspx代码:

<asp:TemplateField HeaderText="Item Description"  SortExpression="ddlItem">
       <ItemTemplate>
         <asp:DropDownList ID="ddlItem" runat="server" Height="25px" Width="200px" SelectedValue='<%# Eval("ddlItem") %>'>
         </asp:DropDownList>
       </ItemTemplate>
    </asp:TemplateField>

这是(c#)背后的代码:

        private void SetInitialRowToGrid()
            {
                // Initialize and Set initial row of Datatable
                var tempDataTable = new DataTable();
                tempDataTable.Columns.Add("lblId");
                tempDataTable.Columns.Add("ddlItem");
                tempDataTable.Columns.Add("txtUnit");
                tempDataTable.Columns.Add("txtQty");
                tempDataTable.Rows.Add("1", "", "", "");

                // Store that datatable into viewstate
                ViewState["TempTable"] = tempDataTable;

                // Attach Gridview Datasource to datatable        
                gvItemList.DataSource = tempDataTable;
                gvItemList.DataBind(); //Here I'm getting the error.
            }

    protected void gvItemList_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                DropDownList ddlItem = (e.Row.FindControl("ddlItem") as DropDownList);
                Jilu1TableAdapters.tbl_ItemTableAdapter item;
                item = new Jilu1TableAdapters.tbl_ItemTableAdapter();
                DataTable dt = new DataTable();
                dt = item.GetItems();

                ddlItem.DataSource = dt;
                ddlItem.DataTextField = "Item";
                ddlItem.DataValueField = "Item";
                ddlItem.DataBind();
                ddlItem.Items.Insert(0, new System.Web.UI.WebControls.ListItem("--Select an Item--", "0"));
            }
        }

protected void ddlSiteID_SelectedIndexChanged(object sender, EventArgs e)
    {
        Jilu1TableAdapters.tbl_Jr_BOMTableAdapter ds;
        ds = new Jilu1TableAdapters.tbl_Jr_BOMTableAdapter();

        DataTable dt = new DataTable();
        dt = ds.GetVersion(ddlSiteID.SelectedValue);

        ddlVersion.DataSource = dt;
        ddlVersion.DataValueField = "Version";
        ddlVersion.DataTextField = "Version";
        ddlVersion.DataBind();

        int ver = Convert.ToInt32(ddlVersion.Text);
        DataTable dt1 = new DataTable();

        dt1 = ds.GetDetails(ddlSiteID.SelectedValue, ver);

        foreach (DataRow row in dt1.Rows)
        {
            txtSiteName.Text = (row["txtSiteName"].ToString());
            ddlSiteType.Text = (row["ddlSiteType"].ToString());
            txtNoBTS.Text = (row["txtNoBTS"].ToString());
            txtNoLinks.Text = (row["txtNoLinks"].ToString());
            txtLoadBand.Text = (row["txtLoadBand"].ToString());
            ddlEBAvailability.Text = (row["ddlEBAvailability"].ToString());
            txtEBPhase.Text = (row["txtEBPhase"].ToString());
            txtDGCapacity.Text = (row["txtDGCapacity"].ToString());
            txtDGPhase.Text = (row["txtDGPhase"].ToString());            
        }
        gvItemList.DataSource = dt1;
        gvItemList.DataBind();
    }

我尝试了Text = 'Bind("ddlItem")', Datasourse, SelectedValue,但仍然没有运气。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

在此代码中,

 <asp:DropDownList ID="ddlItem" runat="server" Height="25px" Width="200px"  
 SelectedValue='<%# Eval("ddlItem") %>'>
 </asp:DropDownList>

您将SelectedValue设置为'<%# Eval("ddlItem") %>',但您的数据源字段中不存在ddlItem

将您想要显示的正确字段放在下拉列表中 我建议您设置DropDownList的DataTextFieldDataValueField 设置为DataTextField="ddlItem" DataValueField="ddlItem" 希望对你有所帮助:))

答案 1 :(得分:0)

你的方式错了

尝试以下方式

protected void gvItemList_RowDataBound(object sender, GridViewEditEventArgs e)
    {
     if (e.Row.RowType == DataControlRowType.DataRow)
      {
            if ((e.Row.RowState & DataControlRowState.Edit) > 0)
            {
              DropDownList ddList= (DropDownList)e.Row.FindControl("ddlItem");
              //bind dropdownlist
              DataTable dt = con.GetData("select * from tablename");//selected data from db or  anywhere for bind ddl
              ddList.DataSource = dt;
              ddList.DataTextField = "YourCOLName";//id
              ddList.DataValueField = "YourCOLName";//displaying name
              ddList.DataBind();

              DataRowView dr = e.Row.DataItem as DataRowView;                 
              ddList.SelectedValue = dr["YourCOLName"].ToString();// default selected value
            }
       }
    }