将下拉列表选定项目文本添加到gridview

时间:2015-10-15 09:41:07

标签: c# asp.net gridview

我有一个网格视图,显示结果集如下

customer |2011 shipped qty|2011 sales price|2012 shipped qty|2012 sales price

    aa        1                     2.00              2                    5.50
    cc        2                     3.00              4                   6.25

我有两个下拉列表作为
monthdropdown1和quarterdropdown2

如果用户选择monthdropdown1为jan,则在网格结果中它应显示为

customer|2011 shipped qty|2011 sales price| 2012 shipped qty| 2012 sales price|
          jan                 jan                 jan            jan

   aa     1                     2.00              2                    5.50
   cc     2                     3.00              4                   6.25

也分别与季度相同

我只需要将选定的dropdowntext添加到网格视图标题列

注意:这里我的网格列属性是autogeneratedcolumn = true

请找到解决方案,我们是否可以将所选文本添加到gridview列标题中,或者是否可以为所选文本添加saperate标题列

我在Rowdatabound event尝试使用此代码并且没有为我工作

if (e.Row.RowType == DataControlRowType.Header)
{
    GridViewRow HeaderRow = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Insert);
    TableCell HeaderCell2 = new TableCell();
    HeaderCell2.Text = (DropDownList1.SelectedItem.Text);
    HeaderCell2.ColumnSpan = 0;
    HeaderRow.Cells.Add(HeaderCell2);
    DataGrid1.Controls[0].Controls.AddAt(0, HeaderRow);
}

如果可能的话,请找我任何其他解决方案

HTML

<asp:GridView ID="DataGrid1" Style="visibility: visible" runat="server" AlternatingRowStyle-BackColor="#E9EDF5"
                Font-Names="Arial" ForeColor="#09538A" Font-Size="12px" BackColor="#ffffff" BorderColor="DarkGray"
                Font-Bold="true" HeaderStyle-BackColor="#298DC7" EnableViewState="false" CellSpacing="20"
                CellPadding="10" ShowFooter="false" HeaderStyle-Font-Bold="true" AutoGenerateColumns="True"  OnRowDataBound="DataGrid1__RowDataBound">
                  <RowStyle HorizontalAlign="Right" Height="20px"/>
                    <alternatingrowstyle  Height="20px" BackColor="#E9EDF5"/>
<%--                OnRowCommand="DataGrid1__RowCommand" OnRowDataBound="DataGrid1__RowDataBound">--%>
                <HeaderStyle Font-Names="Arial;" CssClass="MyHeaderStyle" Font-Size="13px" ForeColor="White"
                    Font-Bold="True" Height="20" BackColor="#298DC7"></HeaderStyle>
  <AlternatingRowStyle BackColor="#E9EDF5" />
            </asp:GridView>

2 个答案:

答案 0 :(得分:0)

请点击此链接,希望这对您有帮助。

On Button click change header text

如果您仍然遇到问题,请告诉我,我会为您创建一个样品。

在您的代码中:

HTML:

 <form id="form1" runat="server">
    <div>
        <asp:GridView ID="DataGrid1" Style="visibility: visible" runat="server" AlternatingRowStyle-BackColor="#E9EDF5"
            Font-Names="Arial" ForeColor="#09538A" Font-Size="12px" BackColor="#ffffff" BorderColor="DarkGray"
            Font-Bold="true" HeaderStyle-BackColor="#298DC7" EnableViewState="false" CellSpacing="20"
            CellPadding="10" ShowFooter="false" HeaderStyle-Font-Bold="true" AutoGenerateColumns="True">
            <RowStyle HorizontalAlign="Right" Height="20px" />
            <AlternatingRowStyle Height="20px" BackColor="#E9EDF5" />
            <%--                OnRowCommand="DataGrid1__RowCommand" OnRowDataBound="DataGrid1__RowDataBound">--%>
            <HeaderStyle Font-Names="Arial;" CssClass="MyHeaderStyle" Font-Size="13px" ForeColor="White"
                Font-Bold="True" Height="20" BackColor="#298DC7"></HeaderStyle>
            <AlternatingRowStyle BackColor="#E9EDF5" />
        </asp:GridView>
        <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
            <asp:ListItem Text="Jan" Value="0"></asp:ListItem>
            <asp:ListItem Text="Feb" Value="1"></asp:ListItem>
            <asp:ListItem Text="Mar" Value="2"></asp:ListItem>
        </asp:DropDownList>

        <asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="true" OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged">
            <asp:ListItem Text="Quater1" Value="0"></asp:ListItem>
            <asp:ListItem Text="Quater2" Value="1"></asp:ListItem>
            <asp:ListItem Text="Quater3" Value="2"></asp:ListItem>
        </asp:DropDownList>

    </div>

</form>

.CS:

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
    List<employee> obj = new List<employee>() { 
            new employee(1, "Sunny1"), 
            new employee(2, "Sunny2"), 
            new employee(3, "Sunny3"), 
            new employee(4, "Sunny4"), 
            new employee(5, "Sunny5"), 
            new employee(6, "Sunny6"), 
            new employee(7, "Anny7")};
    DataGrid1.DataSource = obj;
    DataGrid1.DataBind();
}
protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
{
    Changetext();
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{

    Changetext();
}

private void Changetext()
{
    string str = DropDownList1.SelectedItem.ToString() + " ";
    str += DropDownList2.SelectedItem.ToString();
    if (DataGrid1.Rows.Count > 0)
    {
        for (int i = 0; i < DataGrid1.HeaderRow.Cells.Count; i++)
        {
            DataGrid1.HeaderRow.Cells[i].Text =   DataGrid1.HeaderRow.Cells[i].Text + " " + str; //selectedvalue / text;

        }
    }
}
}

MODAL CLASS:

public class employee
{
public int ID { get; set; }
public string Name { get; set; }
public DateTime Date { get; set; }

public employee(int id, string _name)
{
    ID = id;
    Name = _name;
    Date = DateTime.Now;
}

public employee()
{

}

}

使用此代码告诉我。使用你的html,这工作正常。

答案 1 :(得分:0)

假设您的下拉列表如下所示: -

<asp:DropDownList ID="ddlMonth" runat="server" AutoPostBack="true" 
    OnSelectedIndexChanged="ddlMonth_SelectedIndexChanged" >
     <asp:ListItem Selected="True" Text="Select" Value="-1"></asp:ListItem>
     <asp:ListItem Text="January" Value="1"></asp:ListItem>
     <asp:ListItem Text="February" Value="2"></asp:ListItem>
</asp:DropDownList>

您可以像这样操作gridview标题: -

protected void ddlMonth_SelectedIndexChanged(object sender, EventArgs e)
{
    if(ddlMonth.SelectedValue != "-1")
    {
        for (int i = 1; i < DataGrid1.HeaderRow.Cells.Count; i++)
        {
            DataGrid1.HeaderRow.Cells[i].Text += "  " + ddlMonth.SelectedItem.Text;
        }
    }
}

类似于季度下拉列表。如果您需要更改标题文本,请考虑使用StringBuilder

<强>更新

改为使用for循环。我已经从1启动了循环,因为我想跳过第一列。因此,您可以操纵循环。