在DropDownList事件

时间:2015-10-22 23:51:03

标签: c# asp.net gridview autopostback

我想了解一下DataTable和GridView。我在互联网上找到了一段代码:

protected void Page_Load(object sender, EventArgs e)
{
   DataTable table = new DataTable();
   grid1 = new GridView();
   this.form1.Controls.Add(grid1);

   grid1.AutoGenerateColumns = false;

   table.Columns.Add("Dosage", typeof(int));
   table.Columns.Add("Drug", typeof(string));
   table.Columns.Add("Patient", typeof(string));
   table.Columns.Add("Date", typeof(DateTime));

   // Here we add five DataRows.
   table.Rows.Add(25, "Indocin", "David", DateTime.Now);
   table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
   table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
   table.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
   table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);

   for (int i = 0; i < table.Columns.Count; i++)
            {
              BoundField boundfield = new BoundField();
              boundfield.DataField = table.Columns[i].ColumnName.ToString();
              boundfield.HeaderText = table.Columns[i].ColumnName.ToString();
              grid1.Columns.Add(boundfield);
            }
   grid1.DataSource = table;
   grid1.DataBind();
}

结果:enter image description here

但如果我从Label旁边的DropDownList更改选定值,那就是结果:enter image description here

为什么会有越来越多的专栏?有什么想法吗?

编辑: 我没有&#39;写道,我想把数据库中的数据放入GridView。我将有一个SQL查询,例如&#34; SELECT * FROM TableName WHERE id =&#34; + DropDownList1.SelectedItem,所以我认为它必须在每个Postback上执行。

4 个答案:

答案 0 :(得分:0)

这是因为您正在每次回发时执行代码,评估Page.IsPostBack属性以检查它是初始页面加载还是回发。

你最好去微软虚拟学院一段时间。

答案 1 :(得分:0)

将您的页面加载事件代码放在

if(!Page.IsPostBack)
{
        // Your logic here
}

每次任何控件都使用回发时,它会触发页面加载事件,导致应用程序将新的gridview添加到响应中。了解回发的工作原理和页面生命周期。

答案 2 :(得分:0)

您可以先清除网格,然后将数据加载到网格中。

但是,回发是一个更好的选择。代码是:

if (!IsPostBack)
            {
                do something
                return;
            }

答案 3 :(得分:0)

其他人说的话 - 如果你在第一次加载时这样做,每一次回发你都会得到重复。 form1中的控件存储在视图状态中,但每次都会继续创建新控件。将代码封装在

if (!IsPostBack)
{
     your code here
}