我们可以在Gridview中将列表框作为字段,也可以在Gridview中创建可编辑的字段。?

时间:2013-03-07 06:56:26

标签: c# asp.net listview gridview

我必须为医生开处方,医生会自动从数据库中取出药物,医生可以自行记录药物的类型,效力和频率。

所以我想在Gridview类型字段内的Listbox内检索药物。这可能吗。

其次我还想要如果数据库中没有药物,医生可以编辑Listbox来添加它。最后,我想要一些可直接编辑的字段,例如Textboxes,用于效力,频率和类型。

1 个答案:

答案 0 :(得分:2)

当然,你可以做到这一点。您只需在GridView中放置TextBoxListBox或您选择的任何控件。你可以用一些值初始化它们,或者你可以在其中插入值。

所有你需要的是在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