我必须为医生创建一个处方,药物会自动从数据库中取出,然后医生可以自己写下要服用的药物的类型、效力和频率。
所以我想在Gridview
,Listbox
类型字段内检索药物。这可能吗。
其次,我还希望如果数据库中不存在药物,医生可以编辑Listbox
添加它。最后,我想要一些直接可编辑的字段,例如Textboxes
效力、频率和类型。
当然,你可以这样做。您只需在 GridView 中放置一个TextBox
或ListBox
任何您选择的控件。你可以用一些值初始化它们,或者你可以在其中插入值。
您所需要做的就是在 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的信息。