Gridview绑定到datatable编辑下拉列表C#

Gridview绑定到datatable编辑下拉列表C#,c#,gridview,drop-down-menu,C#,Gridview,Drop Down Menu,我有一个绑定到DataTable的GridView,当您选择edit时,我可以得到要更改的值。但是,一个字段必须是dropdownlist,而不是textbox。这是我到目前为止的代码 protected void griditems_RowUpdating(object sender, GridViewUpdateEventArgs e) { DataTable dt = (DataTable)Session["table"];

我有一个绑定到DataTable的GridView,当您选择edit时,我可以得到要更改的值。但是,一个字段必须是dropdownlist,而不是textbox。这是我到目前为止的代码

protected void griditems_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {               
            DataTable dt = (DataTable)Session["table"];
            //Update the values.
            GridViewRow row = griditems.Rows[e.RowIndex];
            dt.Rows[row.DataItemIndex]["Part"] = ((TextBox)(row.Cells[1].Controls[0])).Text.ToUpper();
            dt.Rows[row.DataItemIndex]["Quantity"] = ((TextBox)(row.Cells[2].Controls[0])).Text;
            dt.Rows[row.DataItemIndex]["Ship-To"] = ((TextBox)(row.Cells[3].Controls[0])).Text.ToUpper();
            dt.Rows[row.DataItemIndex]["Requested Date"] = ((TextBox)(row.Cells[4].Controls[0])).Text;
             //dt.Rows[row.DataItemIndex]["Shipping Method"] = ((TextBox)(row.Cells[5].Controls[0])).Text;

            DropDownList cmbType = (DropDownList)griditems.Rows[e.RowIndex].FindControl("Shipping Method");

            griditems.EditIndex = -1;
            BindData();
        }
    }
当我将shipping方法的行取消注释为textbox时,它的作用与它所说的一样,是一个textbox,而不是dropdownlist。我尝试过将其更改为DropDownList,但运气不佳

在aspx文件中:

<asp:GridView ID="griditems" runat="server" 
        onrowdeleting="griditems_RowDeleting" onrowediting="griditems_RowEditing"
        onrowupdating="griditems_RowUpdating" AllowPaging="True" onpageindexchanging="griditems_PageIndexChanging" 
        onrowcancelingedit="griditems_RowCancelingEdit" ViewStateMode="Enabled" Caption="Order Details" 
        AutoGenerateDeleteButton="True" AutoGenerateEditButton="True" 
        onrowdatabound="griditems_RowDataBound" >            
        <EditRowStyle BackColor="#FF9900" BorderStyle="Double" /></asp:GridView>

您可以借助以下工具继续操作:

dt.Rows[row.DataItemIndex]["Shipping Method"] = ((DropDownList)row.FindControl("DropdownList1")).SelectedItem;
编辑:

dt.Rows[row.DataItemIndex]["Shipping Method"] = ((DropDownList)
(row.Cells[5].Controls[0])).SelectedItem.ToString();
protected void Page_Load(object sender, EventArgs e)
{
   if(!Page.IsPostBack)
   {
      gvBind();
   }
 }

 public void gvBind()
  {
     DataTable dt = createTable();
     Session["tb"] = dt;
     gvshipping.DataSource = Session["tb"];
     gvshipping.DataBind();
  }

  protected void gvshipping_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            if ((e.Row.RowState & DataControlRowState.Edit) > 0)
            {
                DropDownList dpshipmethod = (DropDownList)e.Row.FindControl("DropDownList1");
                //bind dropdownlist
                DataTable dt = shipingmethodTable();
                dpshipmethod.DataSource = dt;
                dpshipmethod.DataTextField = "ShippingMethod";
                dpshipmethod.DataValueField = "Id";
                dpshipmethod.DataBind();
                DataRowView dr = e.Row.DataItem as DataRowView;
                dpshipmethod.SelectedItem.Text = dr["ShippingMethod"].ToString();

            }
        }
    }

 protected void gvshipping_RowEditing(object sender, GridViewEditEventArgs e)
{
      gvshipping.EditIndex = e.NewEditIndex;
      vBind();
 }

 protected void gvshipping_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
 {
   gvshipping.EditIndex = -1;
    gvBind();
 }


    public DataTable createTable()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("Part", typeof(string));
        dt.Columns.Add("Quantity", typeof(Int32));
        dt.Columns.Add("ShipTo", typeof(string));
        dt.Columns.Add("RequestedDate", typeof(string));
        dt.Columns.Add("ShippingMethod", typeof(string));

        string date= DateTime.Now.ToShortDateString();
        DataRow row = dt.NewRow();
        row["Part"] = "Anchor";
        row["Quantity"] = "10";
        row["ShipTo"] = "blah";
        row["RequestedDate"] = date;
        row["ShippingMethod"] = "Charge by subtotal";
        dt.Rows.Add(row);


        DataRow row1 = dt.NewRow();
        row1["Part"] = "blade";
        row1["Quantity"] = "88";
        row1["ShipTo"] = "blah";
        row1["RequestedDate"] = date;
        row1["ShippingMethod"] = "Charge by quantity";
        dt.Rows.Add(row1);

        DataRow row2 = dt.NewRow();
        row2["Part"] = "cabin";
        row2["Quantity"] = "4";
        row2["ShipTo"] = "blah";
        row2["RequestedDate"] = date;
        row2["ShippingMethod"] = "Charge by subtotal";
        dt.Rows.Add(row2);

        DataRow row3 = dt.NewRow();
        row3["Part"] = "cockpit";
        row3["Quantity"] = "11";
        row3["ShipTo"] = "blah";
        row3["RequestedDate"] = date;
        row3["ShippingMethod"] = "Charge by weight";
        dt.Rows.Add(row3);

        DataRow row4 = dt.NewRow();
        row4["Part"] = "jack";
        row4["Quantity"] = "45";
        row4["ShipTo"] = "blah";
        row4["RequestedDate"] = date;
        row4["ShippingMethod"] = "Charge by weight";
        dt.Rows.Add(row4);

        DataRow row5 = dt.NewRow();
        row5["Part"] = "cabin";
        row5["Quantity"] = "67";
        row5["ShipTo"] = "blah";
        row5["RequestedDate"] = date;
        row5["ShippingMethod"] = "Charge by weight";
        dt.Rows.Add(row5);

        DataRow row6 = dt.NewRow();
        row6["Part"] = "blade";
        row6["Quantity"] = "4";
        row6["ShipTo"] = "blah";
        row6["RequestedDate"] = date;
        row6["ShippingMethod"] = "Charge by weight";
        dt.Rows.Add(row6);
        return dt;
    }

    public DataTable shipingmethodTable()
    {
        DataTable dtshipingmethod = new DataTable();
        dtshipingmethod.Columns.Add("Id", typeof(Int32));
        dtshipingmethod.Columns.Add("ShippingMethod", typeof(string));

        DataRow row = dtshipingmethod.NewRow();
        row["Id"] = 1;
        row["ShippingMethod"] = "Charge by subtotal";
        dtshipingmethod.Rows.Add(row);

        DataRow row1 = dtshipingmethod.NewRow();
        row1["Id"] = 2;
        row1["ShippingMethod"] = "Charge by weight";
        dtshipingmethod.Rows.Add(row1);

        DataRow row2 = dtshipingmethod.NewRow();
        row2["Id"] = 3;
        row2["ShippingMethod"] = "Charge by quantity";
        dtshipingmethod.Rows.Add(row2);

        return dtshipingmethod;

    }
试一试dis:

Default.aspx:(GridView中最佳实践使用模板字段)

屏幕截图:

dt.Rows[row.DataItemIndex]["Shipping Method"] = ((DropDownList)
(row.Cells[5].Controls[0])).SelectedItem.ToString();
protected void Page_Load(object sender, EventArgs e)
{
   if(!Page.IsPostBack)
   {
      gvBind();
   }
 }

 public void gvBind()
  {
     DataTable dt = createTable();
     Session["tb"] = dt;
     gvshipping.DataSource = Session["tb"];
     gvshipping.DataBind();
  }

  protected void gvshipping_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            if ((e.Row.RowState & DataControlRowState.Edit) > 0)
            {
                DropDownList dpshipmethod = (DropDownList)e.Row.FindControl("DropDownList1");
                //bind dropdownlist
                DataTable dt = shipingmethodTable();
                dpshipmethod.DataSource = dt;
                dpshipmethod.DataTextField = "ShippingMethod";
                dpshipmethod.DataValueField = "Id";
                dpshipmethod.DataBind();
                DataRowView dr = e.Row.DataItem as DataRowView;
                dpshipmethod.SelectedItem.Text = dr["ShippingMethod"].ToString();

            }
        }
    }

 protected void gvshipping_RowEditing(object sender, GridViewEditEventArgs e)
{
      gvshipping.EditIndex = e.NewEditIndex;
      vBind();
 }

 protected void gvshipping_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
 {
   gvshipping.EditIndex = -1;
    gvBind();
 }


    public DataTable createTable()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("Part", typeof(string));
        dt.Columns.Add("Quantity", typeof(Int32));
        dt.Columns.Add("ShipTo", typeof(string));
        dt.Columns.Add("RequestedDate", typeof(string));
        dt.Columns.Add("ShippingMethod", typeof(string));

        string date= DateTime.Now.ToShortDateString();
        DataRow row = dt.NewRow();
        row["Part"] = "Anchor";
        row["Quantity"] = "10";
        row["ShipTo"] = "blah";
        row["RequestedDate"] = date;
        row["ShippingMethod"] = "Charge by subtotal";
        dt.Rows.Add(row);


        DataRow row1 = dt.NewRow();
        row1["Part"] = "blade";
        row1["Quantity"] = "88";
        row1["ShipTo"] = "blah";
        row1["RequestedDate"] = date;
        row1["ShippingMethod"] = "Charge by quantity";
        dt.Rows.Add(row1);

        DataRow row2 = dt.NewRow();
        row2["Part"] = "cabin";
        row2["Quantity"] = "4";
        row2["ShipTo"] = "blah";
        row2["RequestedDate"] = date;
        row2["ShippingMethod"] = "Charge by subtotal";
        dt.Rows.Add(row2);

        DataRow row3 = dt.NewRow();
        row3["Part"] = "cockpit";
        row3["Quantity"] = "11";
        row3["ShipTo"] = "blah";
        row3["RequestedDate"] = date;
        row3["ShippingMethod"] = "Charge by weight";
        dt.Rows.Add(row3);

        DataRow row4 = dt.NewRow();
        row4["Part"] = "jack";
        row4["Quantity"] = "45";
        row4["ShipTo"] = "blah";
        row4["RequestedDate"] = date;
        row4["ShippingMethod"] = "Charge by weight";
        dt.Rows.Add(row4);

        DataRow row5 = dt.NewRow();
        row5["Part"] = "cabin";
        row5["Quantity"] = "67";
        row5["ShipTo"] = "blah";
        row5["RequestedDate"] = date;
        row5["ShippingMethod"] = "Charge by weight";
        dt.Rows.Add(row5);

        DataRow row6 = dt.NewRow();
        row6["Part"] = "blade";
        row6["Quantity"] = "4";
        row6["ShipTo"] = "blah";
        row6["RequestedDate"] = date;
        row6["ShippingMethod"] = "Charge by weight";
        dt.Rows.Add(row6);
        return dt;
    }

    public DataTable shipingmethodTable()
    {
        DataTable dtshipingmethod = new DataTable();
        dtshipingmethod.Columns.Add("Id", typeof(Int32));
        dtshipingmethod.Columns.Add("ShippingMethod", typeof(string));

        DataRow row = dtshipingmethod.NewRow();
        row["Id"] = 1;
        row["ShippingMethod"] = "Charge by subtotal";
        dtshipingmethod.Rows.Add(row);

        DataRow row1 = dtshipingmethod.NewRow();
        row1["Id"] = 2;
        row1["ShippingMethod"] = "Charge by weight";
        dtshipingmethod.Rows.Add(row1);

        DataRow row2 = dtshipingmethod.NewRow();
        row2["Id"] = 3;
        row2["ShippingMethod"] = "Charge by quantity";
        dtshipingmethod.Rows.Add(row2);

        return dtshipingmethod;

    }

您尝试过使用模板吗?@JimS.:如果我没有错,您希望在girdview处于编辑模式时填充dropdownlist以获得配送方法!我已经尝试添加了上面的代码,但它仍然被填充为文本框,而不是组合框。请将其与gridview行一起放入原始问题中。@JimS。