我必须为医生开处方,医生会自动从数据库中取出药物,医生可以自行记录药物的类型,效力和频率。
所以我想在Gridview
类型字段内的Listbox
内检索药物。这可能吗。
其次我还想要如果数据库中没有药物,医生可以编辑Listbox
来添加它。最后,我想要一些可直接编辑的字段,例如Textboxes
,用于效力,频率和类型。
答案 0 :(得分:2)
当然,你可以做到这一点。您只需在GridView中放置TextBox
或ListBox
或您选择的任何控件。你可以用一些值初始化它们,或者你可以在其中插入值。
所有你需要的是在GridView中找到那些控件,因为它是一个数据转发器控件,所以假设你在GridView中放置一个文本框,然后用一个包含5个项目的List绑定它,然后5个将呈现此类文本框,因此您需要能够准确找到所需的textBox。
下面给出一个非常简单的例子。
你的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。