2013-03-07 29 views
1

我必須爲醫生開一張處方藥,藥物自動從數據庫中取出,然後醫生可以寫出藥物的類型,效力和使用頻率。我們可以有一個列表框作爲Gridview中的一個字段,也可以在Gridview中編輯可編輯的字段..?

所以我想檢索類型字段中的Gridview內的藥品。這可能嗎。

其次,我還希望如果數據庫中沒有藥物,醫生可以編輯Listbox來添加它。最後,我需要一些可直接編輯的字段,例如Textboxes,用於效力,頻率和類型。

+1

[你有什麼嘗試?](http://whathaveyoutried.com) – 2013-03-07 07:07:26

回答

1

當然,你可以做到這一點。您只需在GridView中放置一個TextBoxListBox或您選擇的任何控件。你可以用一些值來初始化它們,或者,你可以在其中插入值。

所有你需要的是在GridView中查找這些控件,因爲它是一個數據中繼控件,所以假設你將一個文本框放在GridView中,然後用一個包含5個項目的列表綁定它,然後5個這樣的文本框將被渲染,所以你需要能夠準確地找到你需要的文本框。

下面我給你一個非常簡單的例子。

你的GridView的標記:

<asp:GridView ID="Review_grid" runat="server" AllowPaging="True" PageSize="10" 
      AutoGenerateColumns="False" onrowdatabound="Review_grid_RowDataBound" 
      > 
      <Columns> 
       <asp:TemplateField HeaderText="ListBox"> 
        <ItemTemplate> 
         <asp:ListBox ID="lstBox" runat="server"></asp:ListBox> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="TextBox"> 
        <ItemTemplate> 
         <asp:TextBox ID="txtBox" runat="server"></asp:TextBox> 
        </ItemTemplate> 
       </asp:TemplateField> 
      </Columns> 
     </asp:GridView> 

您的代碼隱藏代碼。

///create datasource for your GridView. 
public void BindGrid() 
{ 
    DataTable db = new DataTable(); 
    db.Columns.Add("col1"); 
    db.Columns.Add("col2"); 
    db.Columns.Add("col3"); 
    db.Rows.Add("1", "2", "3"); 
    db.Rows.Add("1", "2", "3"); 
    db.Rows.Add("1", "2", "3"); 

    Review_grid.DataSource = db; 
    Review_grid.DataBind(); 
} 

RowDataBound事件GridView陷阱控制,具有一定的價值進行初始化:

protected void Review_grid_RowDataBound(object sender, GridViewRowEventArgs e) 
     { 
      if (e.Row.RowType == DataControlRowType.DataRow) 
      { 
       //find ListBox 
       ListBox lst = (ListBox)e.Row.FindControl("lstBox"); 
       lst.Items.Add(new ListItem("item1")); 
       lst.Items.Add(new ListItem("item2")); 
       lst.Items.Add(new ListItem("item3")); 

       //find textBox 
       TextBox txt = (TextBox)e.Row.FindControl("txtBox"); 
       txt.Text = "test"; 

      } 
     } 

呼叫BindGrid()在頁面Page_load

您需要了解更多關於GridView和其他dataControls的信息。

+0

非常感謝你的幫助 – 2013-03-07 11:42:39

+0

我們可以添加任何項目到這個創建的列表框中,一旦網站已經運行,我的意思是顯示頁面後?? – 2013-03-08 05:55:35

+0

爲什麼不?當然你可以做到這一點,儘管ListBox沒有這樣的特定事件,但你可以做的是,你可以在GridView內的每個ListBox下面放置一個按鈕。並點擊該按鈕後,您可以顯示一個彈出窗口(一個隱藏的div,它會在點擊時出現)。並且您可以接受新項目的名稱輸入,並且在您提交時,再次遍歷GridView項目和FindControl ListBox項目,並添加項目(從div中的輸入)。並保存它分貝,並重新填充你的GridView – 2013-03-08 06:33:20