C# 如何基于asp.net gridview控件中表格行单元格的特定值在dropdownlist中显示特定项?

C# 如何基于asp.net gridview控件中表格行单元格的特定值在dropdownlist中显示特定项?,c#,asp.net,gridview,drop-down-menu,C#,Asp.net,Gridview,Drop Down Menu,我是asp.net新手。我正在构建一个管理页面,我想通过从数据库表中获取员工的数据,在GridView中显示员工的数据。表有3列(id、名称、isManager)。“isManager”列有三个可能的值。这些值为“是”、“否”和“空”。管理员有权通过从下拉列表中选择“是”或“否”来决定让员工担任经理 此管理页面有一个GridView控件,其中包含两个BoundFiled(即id和名称)和一个模板字段(即DropDownList)。我在DropDownList中显示“isManager”列值时遇到

我是asp.net新手。我正在构建一个管理页面,我想通过从数据库表中获取员工的数据,在GridView中显示员工的数据。表有3列(id、名称、isManager)。“isManager”列有三个可能的值。这些值为“是”、“否”和“空”。管理员有权通过从下拉列表中选择“是”或“否”来决定让员工担任经理

此管理页面有一个GridView控件,其中包含两个BoundFiled(即id和名称)和一个模板字段(即DropDownList)。我在DropDownList中显示“isManager”列值时遇到困难。如果数据库表行在“isManager”列中有“是”,我希望DropDownList将所选值/文本显示为“是”;如果表行中有“否”,则显示“否”;如果表行包含空值,则显示“选择”项

我的代码:

 protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
 {
   string query = "select * from tblUsersTable";
   DataSet ds = DataBaseConnectivity.GetData(query);
   GridView1.DataSource = ds;
   GridView1.DataBind();
  }
 }

 // RowDataBound() method

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
 {
   if (e.Row.RowType == DataControlRowType.DataRow)
     {
       //Find the DropDownList in the Row
      DropDownList ddlManager = (e.Row.FindControl("ddlManager") as DropDownList);
      DataSet ds = DataBaseConnectivity.GetData
                                 ("select distinct [isManager] from tblUsersTable");
      ddlManager.DataSource = ds; 
      ddlManager.DataTextField = "isManager";
      ddlManager.DataValueField = "isManager";
      ddlManager.DataBind();
      ddlManager.Items.Insert(0, new ListItem("Please select","-1"));

      /* After these lines of code i am not finding the right way to implement my logic
        */

请帮我弄清楚。

您必须使用
GridViewRow
DataItem
来访问underyling记录。然后,您可以通过下拉列表选择corect项。SelectedValue:

 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
 {
   if (e.Row.RowType == DataControlRowType.DataRow)
     {
       //Find the DropDownList in the Row
      DropDownList ddlManager = (e.Row.FindControl("ddlManager") as DropDownList);
      DataSet ds = DataBaseConnectivity.GetData
                                 ("select distinct [isManager] from tblUsersTable");
      ddlManager.DataSource = ds; 
      ddlManager.DataTextField = "isManager";
      ddlManager.DataValueField = "isManager";
      ddlManager.DataBind();
      ddlManager.Items.Insert(0, new ListItem("Please select","-1"));
      DataRow row = ((DataRowView)e.Row.DataItem).Row;
      bool isManager= row.Field<bool>("isManager"); // use the correct type if it's not bool
      ddlManager.SelectedValue = isManager.ToString();
受保护的无效GridView1\u行数据绑定(对象发送方,GridViewRowEventArgs e)
{
如果(e.Row.RowType==DataControlRowType.DataRow)
{
//在该行中找到DropDownList
DropDownList ddlManager=(e.Row.FindControl(“ddlManager”)作为DropDownList);
DataSet ds=DataBaseConnectivity.GetData
(“从tblUsersTable中选择不同的[isManager]);
ddlManager.DataSource=ds;
ddlManager.DataTextField=“isManager”;
ddlManager.DataValueField=“isManager”;
ddlManager.DataBind();
ddlManager.Items.Insert(0,新列表项(“请选择“,”-1”);
DataRow row=((DataRowView)e.row.DataItem).row;
bool isManager=row.Field(“isManager”);//如果不是bool,请使用正确的类型
ddlManager.SelectedValue=isManager.ToString();

除此之外,我不会在ASP.NET中使用像
DataBaseConnectivity
这样的db帮助器类。它们只是严重错误或性能问题的来源,如果使用静态连接,更是如此。更多信息。

旁注:在调用
GridView1.DataBind()之前,应该加载
DataSet
输入一个字段,然后您可以从
RowDataBound
访问它,而无需在每一行都加载它。谢谢您的帮助。愿上帝保佑(y)谢谢亲爱的。您是真正的帮助者。继续。