如何在gridview中填写下拉列表 [英] How do I fill dropdownlist in gridview
问题描述
我正在尝试在GridView中填充DropDownList
我尝试过:
i有这个类来调用StoredProcedure:
公共类DropDownList_DataAccessLayer
{
public static void DDL(DropDownList DDl,string ProcedureName,SqlParameter SPParameter,string DDLText,string DDLValue,string TXT)
{
string CS = ConfigurationManager.ConnectionStrings [DBCS] .ConnectionString;
使用(SqlConnection CON = new SqlConnection(CS))
{
SqlCommand CMD = new SqlCommand();
CMD = CON.CreateCommand();
CMD.CommandType = CommandType.StoredProcedure;
if(SPParameter!= null)
{
CMD.Parameters.Add(SPParameter);
}
CMD.Connection = CON;
CMD.CommandText = ProcedureName;
CON.Open();
SqlDataReader RD = CMD.ExecuteReader();
DDl.DataSource = RD;
DDl.DataTextField = DDLText ;
DDl.DataValueField = DDLValue;
DDl.DataBind();
ListItem li = new ListItem(Please Select+ TXT, - 1);
DDl.Items.Insert(0,li);
RD .Close();
CON.Close();
}
}
}
Pageloade
我有这个:
protected void Page_Load(object sender,EventArgs e)
{
if(!IsPostBack)
{
BindGridViewData();
}
}
private void BindGridViewData( )
{
int CenterCode = Convert.ToInt32(Request.QueryString [Center_Code]);
GridView1.DataSource = ProjectDataAccessLayer.GetAllProjects (CenterCode);
GridView1.DataBind();
}
GridView1_RowDataBound中的
我有:
protected void GridView1_RowDataBound(object sender,GridViewRowEventArgs e)
{
DropDownList ActiveCenterDDL =(DropDownList)e。 Row.FindControl(ddlEditCenters);
DropDownList NewActiveCenterDDL =(DropDownList)e.Row.FindControl(ddlNewCenters);
DropDownList_DataAccessLayer.DDL(ActiveCenterDDL,Get_ActiveCenters,null,CenterName,CenterCode,Center); // for
DropDownList_DataAccessLayer.DDL(NewActiveCenterDDL,Get_ActiveCenters,null,CenterName,CenterCode,Center);
$ b aspx中的$ b我有这个:
< asp:TemplateField HeaderText =CentersSortExpression =Center_Name>
< itemtemplate>
< asp:标签ID =lblCenterNamerunat =serverText ='<%#Bind(Center_Name)%> '>
< edititemtemplate>
< asp:DropDownList ID =ddlEditCentersCssClass =gveditrunat =serverValidationGroup =EditRow>
< asp:RequiredFieldValidator CssClass =ValidatorID =ddlEditCentersValidatorrunat =serverControlToValidate =ddlEditCentersErrorMessage =你没有选择中心InitialValue = - 1ValidationGroup =Edit> *
< footertemplate>
< asp:DropDownList ID =ddlNewCentersCssClass =gvfooterrunat =server>
i'm trying to fill DropDownList in GridView
What I have tried:
i have this class to call StoredProcedure :
public class DropDownList_DataAccessLayer
{
public static void DDL(DropDownList DDl, string ProcedureName, SqlParameter SPParameter, string DDLText, string DDLValue, string TXT)
{
string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
using (SqlConnection CON = new SqlConnection(CS))
{
SqlCommand CMD = new SqlCommand();
CMD = CON.CreateCommand();
CMD.CommandType = CommandType.StoredProcedure;
if (SPParameter != null)
{
CMD.Parameters.Add(SPParameter);
}
CMD.Connection = CON;
CMD.CommandText = ProcedureName;
CON.Open();
SqlDataReader RD = CMD.ExecuteReader();
DDl.DataSource = RD;
DDl.DataTextField = DDLText;
DDl.DataValueField = DDLValue;
DDl.DataBind();
ListItem li = new ListItem(" Please Select " + TXT, "-1");
DDl.Items.Insert(0, li);
RD.Close();
CON.Close();
}
}
}
in Pageloade i have this:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindGridViewData();
}
}
private void BindGridViewData()
{
int CenterCode = Convert.ToInt32(Request.QueryString["Center_Code"]);
GridView1.DataSource = ProjectDataAccessLayer.GetAllProjects(CenterCode);
GridView1.DataBind();
}
in GridView1_RowDataBound i have this :
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
DropDownList ActiveCenterDDL = (DropDownList)e.Row.FindControl("ddlEditCenters");
DropDownList NewActiveCenterDDL = (DropDownList)e.Row.FindControl("ddlNewCenters");
DropDownList_DataAccessLayer.DDL(ActiveCenterDDL, "Get_ActiveCenters", null, "CenterName", "CenterCode", "Center"); // for
DropDownList_DataAccessLayer.DDL(NewActiveCenterDDL, "Get_ActiveCenters", null, "CenterName", "CenterCode", "Center");
in aspx i have this :
<asp:TemplateField HeaderText="Centers" SortExpression="Center_Name">
<itemtemplate>
<asp:Label ID="lblCenterName" runat="server" Text='<%# Bind("Center_Name") %>'>
<edititemtemplate>
<asp:DropDownList ID="ddlEditCenters" CssClass="gvedit" runat="server" ValidationGroup="EditRow">
<asp:RequiredFieldValidator CssClass="Validator" ID="ddlEditCentersValidator" runat="server" ControlToValidate="ddlEditCenters" ErrorMessage="you didn't select a center" InitialValue="-1" ValidationGroup="Edit">*
<footertemplate>
<asp:DropDownList ID="ddlNewCenters" CssClass="gvfooter" runat="server">
推荐答案
如下例所示:
Something like below example:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if ((e.Row.RowState & DataControlRowState.Edit) > 0)
{
DropDownList ActiveCenterDDL= (DropDownList)e.Row.FindControl("ddlEditCenters");
//bind dropdown-list
DataTable dt = con.GetData("Select category_name from category");
ActiveCenterDDL.DataSource = dt;
ActiveCenterDDL.DataTextField = "category_name";
ActiveCenterDDL.DataValueField = "category_name";
ActiveCenterDDL.DataBind();
DropDownList NewActiveCenterDDL= (DropDownList)e.Row.FindControl("ddlEditCenters");
//bind dropdown-list
DataTable dt = con.GetData("Select category_name from category");
NewActiveCenterDDL.DataSource = dt;
NewActiveCenterDDL.DataTextField = "category_name";
NewActiveCenterDDL.DataValueField = "category_name";
NewActiveCenterDDL.DataBind();
DataRowView dr = e.Row.DataItem as DataRowView;
//ddList.SelectedItem.Text = dr["category_name"].ToString();
ActiveCenterDDL.SelectedValue = dr["category_name"].ToString();
}
}
}
如果我理解正确,你想填充DropDownList
来自EditItemTemplate
。如果是这种情况,那么本文应该为您提供帮助: ASP.NET GridView:在编辑模式下实施级联DropDownList [ ^ ]
If I understand correctly, you wanted to populate yourDropDownList
from withinEditItemTemplate
. If that's the case then this article should help you with that: ASP.NET GridView: Implementing Cascading DropDownList on Edit Mode[^]
这篇关于如何在gridview中填写下拉列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!