2015-10-22 40 views
0

後,我想了解一些有關數據表和GridView。我發現了一段代碼在互聯網上:列在GridView中被複制的DropDownList事件

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

但如果我更改選定值從DropDownList中旁邊的標籤,這是一個結果:enter image description here

爲什麼有越來越更多專欄?有任何想法嗎?

編輯: 我沒有」寫的,我想從數據庫中放入數據的GridView。我將有一個SQL查詢,例如「SELECT * FROM TableName WHERE id =」+ DropDownList1.SelectedItem,所以我認爲它必須與每個Postback一起執行。

回答

0

這是因爲你在每一個回發執行代碼,評估Page.IsPostBack屬性,以檢查它是否是初始頁面加載或回傳。

你最好去微軟虛擬學院一會兒。

+0

哦,我沒有寫'我想將數據從數據庫放入GridView。我將有一個SQL查詢,例如「SELECT * FROM TableName WHERE」+ DropDownList1.SelectedItem,所以我認爲它必須在每個Postback中執行。 – smile

+0

在DropDownList的SelectedIndexChanged事件上做到這一點,但這並不意味着您應該一遍又一遍地創建列。使一個名爲「BuildGridView」的方法在Page_Load(IsPostback == true)上調用它,並使另一個名爲「PopulateGridView」的對象在SelectedIndexChanged事件中調用它。 – JCM

0

把你的頁面加載事件代碼中

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

每當任何控制casuses它觸發這會導致你的應用程序的新GridView控件添加到響應頁面加載事件回發。瞭解回發如何工作和頁面生命週期。

0

您可以先清除網格然後將數據加載到它。

回傳,雖然是一個更好的選擇。代碼是:

if (!IsPostBack) 
      { 
       do something 
       return; 
      } 
0

其他人說什麼 - 如果你是在第一次加載和每一次回發時這樣做,你會得到重複。 form1中的控件存儲在視圖狀態中,但每次都不斷創建新控件。封裝代碼

if (!IsPostBack) 
{ 
    your code here 
} 
相關問題