【发布时间】:2016-09-27 10:06:27
【问题描述】:
我正在尝试使我的图表宽度和高度动态化,但我无法让它工作。到目前为止,我已经尝试过:
我在 Asp:Panel 中设置了图表,并为面板提供了所需的百分比值。
<asp:Panel ID="Panel1" runat="server" Width="90%" Height="40%">
<asp:Chart ID="Chart1" runat="server" CssClass="chart">
<Series>
<asp:Series Name="Series1"></asp:Series>
</Series>
<ChartAreas>
<asp:ChartArea Name="ChartArea1"></asp:ChartArea>
</ChartAreas>
</asp:Chart>
</asp:Panel>
然后我尝试在我的 C# 代码中将这些值分配给图表
Chart1.Width = Panel1.Width;
Chart1.Height = Panel1.Height;
但这会产生异常,因为图表接收的是百分比值而不是像素数量。我也试过 (int)Panel.Width.Value 无济于事。
我也试过用 CSS 来做,摆弄 position:absolute 和其他属性,但同样,我可以让它在面板上工作,但不能在图表上工作。
谁能告诉我一个不需要进入 JQuery 等的简单解决方案?
编辑:
Panel1.Width 的变量值会输出 90% 而 Panel1.Width.Value 会出于某种原因输出 90 (40% 和 40 用于 Panel1.Height)。
Chart1.Width.Value 将具有由 Visual Studio 分配的默认值 300px,因此:
Chart1.Width = new Unit(Chart1.Width.Value * Panel1.Width.Value / 100, UnitType.Pixel);
会像我做的一样输出:
Chart1.Width = new Unit(300 * 90 / 100, UnitType.Pixel);
输出: 270px 的静态值
我需要获取 Panel1.Width 百分比检索到的像素值,但我想不出办法
编辑 2:
使用 css 的图表拉伸位可以正常工作,但输出有点令人印象深刻,所以我试图让 javascript 示例工作,但我没有成功......我添加了一个按钮来强制回发并在我插入的 page_load 事件:
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
if (panelWidth.Value != "" && panelHeight.Value != "")
{
Chart1.Visible = true;
Chart1.Width = int.Parse(panelWidth.Value);
Chart1.Height = int.Parse(panelHeight.Value);
}
}
else //Initialize the chart with some sample points
{
Chart1.Series[0].Points.AddXY(1, 1);
Chart1.Series[0].Points.AddXY(1, 2);
Chart1.Series[0].Points.AddXY(2, 1);
Chart1.Series[0].Points.AddXY(2, 2);
Chart1.Series[0].Points.AddXY(3, 1);
Chart1.Series[0].Points.AddXY(3, 2);
}
}
如果我启动页面图表显然不可见,所以我还添加了一个按钮
<asp:Button ID="Button1" runat="server" Text="Button" />
到表单以触发回发,这会重新加载页面,但 panelWidth.Value 和 panelHeight.Value 仍然为空。我错过了什么吗?好像我无法触发javascript代码:/
【问题讨论】:
-
将
Width="100%" Height="100%"设置为图表会发生什么? -
您不能为图表度量设置百分比值,它不会接受任何宽度或高度的百分比
-
将图表的dockstyle设置为填充不起作用?
-
很抱歉,我在图表控件上找不到该属性是你自己编的吗?
-
你想让图表响应吗?也就是说,如果您调整浏览器窗口的大小,您是否希望图表的大小发生变化?