单击特定单元格asp.net表时显示DropDownlist

时间:2017-04-12 11:53:57

标签: c# asp.net

我想知道如何在点击按钮后立即在表格中的特定单元格上显示dropDownList" Show DropDownlist"位于那个牢房。

这是后面的代码,现在它在每行的最后一个单元格中显示dropDownList。并且我想只在点击按钮时才显示它。

while (rdr.Read())
                {
                    TableRow tRow = new TableRow();
                    myTable.Rows.Add(tRow);
                    for (int i = 0; i <= 4; i++)
                    {
                        // Create a new cell and add it to the row.
                        TableCell tCell = new TableCell();
                        if (i == 4)
                        { 
                            tCell.Controls.Add(SM_List());  //Adding the dropdownlist             
                            tRow.Cells.Add(tCell);
                            continue;
                        }

                            tCell.Text = rdr.GetString(i);
                            tCell.Attributes.Add("onmouseover", "this.style.cursor = 'pointer'; this.style.backgroundImage = ''; ");
                            tCell.Attributes.Add("onClick", "getData()");
                            tRow.Cells.Add(tCell);

                    }
                    /* iterate once per row */
                }

我想添加此代码,因此它首先是一个按钮,而不是下拉列表:

Button bt = new Button();
bt.Text = "Switch";
bt.Click += new EventHandler(DropDownList_Show);
tCell.Controls.Add(bt);

但我不知道如何在按钮所在的确切单元格中显示DropDownList。而且我想在下拉列表中选择值时执行一些操作。 你能帮忙吗,我觉得有点失落。

1 个答案:

答案 0 :(得分:1)

您可以使用ASP.NET中的GridView轻松解决此问题。 假设在ASPX页面中将GridView声明为以下内容。

<asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand" AutoGenerateColumns="false">
    <Columns>
        <asp:BoundField DataField="Id" />
        <asp:BoundField DataField="Token" />
        <asp:BoundField DataField="Secret" />
        <asp:ButtonField CommandName="ShowDropDown" Text="Show" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:DropDownList ID="dropDownList" runat="server" Visible="false">
                    <asp:ListItem Text="Valid" Value ="1"></asp:ListItem>
                    <asp:ListItem Text="Invalie" Value ="2"></asp:ListItem>
                </asp:DropDownList>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

以下是代码后面的方法,用于填充GridView。

private void BindGridView()
{

    var tokens = new List<AccessToken>();
    using (var conn = new SqlConnection("Server=somedbserver;Database=somedatabase;User Id=someuser;Password=somepassword;"))
    {
        using (var command = new SqlCommand())
        {
            command.Connection = conn;
            command.CommandText = "SELECT Id, Token, Secret FROM Tokens";

            command.CommandType = System.Data.CommandType.Text;
            conn.Open();

            using (var reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    var token = new AccessToken();
                    token.Id = reader.GetInt32(0);
                    token.Token = reader.GetString(1);
                    token.Secret = reader.GetString(2);
                    tokens.Add(token);
                }
            }
        }
    }
    GridView1.DataSource = tokens;
    GridView1.DataBind();
}

我在Page_Load中调用此方法。

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        BindGridView();
    }
}

以下是GridView的RowCommand事件的事件处理程序,它将在单击的按钮旁边的列中显示下拉列表。

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if(e.CommandName == "ShowDropDown")
    {
        var row = GridView1.Rows[Convert.ToInt32(e.CommandArgument)];

        //Using Cell[4] coz the Dropdownlist is in 5th column of the row.
        //You need to replace 4 with appropriate column index here.
        //Also replace "dropDownList" with the ID assigned to the dropdown list in ASPX.
        var ddl = (DropDownList)row.Cells[4].FindControl("dropDownList");

        if(ddl != null)
        {
            ddl.Visible = true;
        }
    }
}

如果您采用这种方法,您就可以解决问题。