[英]populate drop-down list with column headings from sqldatasource
我有一個文本框,可以在其中輸入任意SQL SELECT語句。 我想生成一個顯示結果的表格,一個圖表以及一個y和x軸的下拉列表,用戶可以在其中選擇要在x軸上顯示哪個結果列以及在y-軸上顯示哪個結果列。軸。
目前,我使用文本框中的文本來更新SqlDataSource的SelectCommand。 我有一個與AutoGenerateColumns設置為true的數據源綁定的GridView。 這很好地生成了我的表。
我將圖表綁定到相同的數據源,我想在結果列標題中填充兩個下拉列表,然后更新圖表的XValueMember和XValueMember屬性。 我遇到的問題是如何確定列名稱以便填充下拉列表。 由於GridView會自動生成這些值,因此我嘗試從那里讀取值,但是我得到的是舊值,而不是最新SELECT語句中的值。
在我的default.aspx中,我有:
<asp:Chart ID="Chart1" runat="server" DataSourceID="SqlDataSource1">
<Series>
<asp:Series Name="Series1" ChartType="Line"></asp:Series>
</Series>
<ChartAreas>
<asp:ChartArea Name="ChartArea1"></asp:ChartArea>
</ChartAreas>
</asp:Chart>
<asp:DropDownList ID="ddlX" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ddlX_SelectedIndexChanged">
</asp:DropDownList>
<asp:DropDownList ID="ddlY" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ddlY_SelectedIndexChanged">
</asp:DropDownList>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="True" DataSourceID="SqlDataSource1" AllowSorting="True">
</asp:GridView>
<asp:SqlDataSource runat="server" ID="SqlDataSource1" ConnectionString='<%$ ConnectionStrings:myConnectionString %>'</asp:SqlDataSource>
並在代碼隱藏(C#)中
protected void ddlX_SelectedIndexChanged(object sender, EventArgs e)
{
Chart1.Series[0].XValueMember = this.ddlX.SelectedValue;
}
protected void ddlY_SelectedIndexChanged(object sender, EventArgs e)
{
Chart1.Series[0].YValueMembers = this.ddlY.SelectedValue;
}
但是如何填充下拉框。
我能夠得到一個可行的解決方案:在page_load期間閱讀gridview列並更新圖表XSeries和YSeries。 現在的代碼如下所示:
Default.aspx
<asp:Chart ID="Chart1" runat="server" DataSourceID="SqlDataSource1">
<Series>
<asp:Series Name="Series1" ChartType="Line"></asp:Series>
</Series>
<ChartAreas>
<asp:ChartArea Name="ChartArea1"></asp:ChartArea>
</ChartAreas>
</asp:Chart>
<asp:DropDownList ID="ddlX" runat="server" AutoPostBack="True">
</asp:DropDownList>
<asp:DropDownList ID="ddlY" runat="server" AutoPostBack="True">
</asp:DropDownList>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="True" DataSourceID="SqlDataSource1" AllowSorting="True">
</asp:GridView>
<asp:SqlDataSource runat="server" ID="SqlDataSource1" ConnectionString='<%$ ConnectionStrings:myConnectionString %>'</asp:SqlDataSource>
Default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
// get column names from gridview and populate ddl
int cols = GridView1.HeaderRow.Cells.Count;
int selInd = ddlX.SelectedIndex;
ddlX.Items.Clear();
for (int i = 0; i < cols; i++)
{
LinkButton Link = GridView1.HeaderRow.Cells[i].Controls[0] as LinkButton;
string col = Link.Text;
ddlX.Items.Insert(i, col);
}
ddlX.SelectedIndex = selInd;
cols = GridView1.HeaderRow.Cells.Count;
selInd = ddlY.SelectedIndex;
ddlY.Items.Clear();
for (int i = 0; i < cols; i++)
{
LinkButton Link = GridView1.HeaderRow.Cells[i].Controls[0] as LinkButton;
string col = Link.Text;
ddlY.Items.Insert(i, col);
}
ddlY.SelectedIndex = selInd;
// set chart axes
Chart1.Series[0].XValueMember = ddlX.SelectedValue;
Chart1.Series[0].YValueMembers = ddlY.SelectedValue;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.