我有一个查询我的数据库并返回数据的webform。数据返回到文本框,一旦返回,数据就可以编辑并发送回数据库并保存为新记录。我的问题是,我有一个查询的表(引用)有多个记录,在某些情况下最多52个。
我不想在搜索具有52个引用的项目的情况下创建52个文本框,因为通常少于5个,这将占用太多空间。所以我的问题是,如何在不创建52个文本框的情况下返回所有行?
Gridview不起作用,我的经理说我们的员工点击的次数太多(编辑/更新/删除等,他们可能要做52次,这显然是过分的)。
SqlCommand com3;
String str3;
//item_detail code for options
str3 = "select * from item_reference r left join item_header h on h.item_header_id = r.item_header_id where d.option_order =2 and h.item_id ='" + cloneItemID.Text + "'";
com3 = new SqlCommand(str3, con);
SqlDataReader readerThree = com3.ExecuteReader();
if (readerThree.Read())
{
refcodeTextBox.Text = readerThree["ref_code"].ToString();
readerThree.Close();
}
else
{
readerThree.Close();
}
答案 0 :(得分:0)
您可以使用GridView。通过使用TemplateField类型的列,您可以在网格中添加文本框,用户无需单击按钮即可更改这些文本框。您可以在网格上方或下方放置一个中央按钮,然后通过迭代网格行来保存所有更改。
这是一个非常简单的示例应用程序。
这是普通页面中的aspx部分:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="LastName,FirstName">
<Columns>
<asp:BoundField DataField="LastName" HeaderText="LastName" />
<asp:BoundField DataField="FirstName" HeaderText="FirstName" />
<asp:TemplateField HeaderText="Street">
<ItemTemplate>
<asp:TextBox ID="txtStreet" runat="server" Text='<%#Eval("Street") %>' ></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="ZIP">
<ItemTemplate>
<asp:TextBox ID="txtZIP" runat="server" Text='<%#Eval("ZIP") %>' ></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="City">
<ItemTemplate>
<asp:TextBox ID="txtCity" runat="server" Text='<%#Eval("City") %>' ></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
这是相关代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// Fill the grid with data
DataTable x = new DataTable();
x.Columns.Add("LastName");
x.Columns.Add("FirstName");
x.Columns.Add("Street");
x.Columns.Add("ZIP");
x.Columns.Add("City");
x.Rows.Add("Müller", "Fritz", "Amselweg 12", "77777", "Entenhausen");
x.Rows.Add("Monroe", "Marylin", "5th Avenue", "12345", "New York");
x.Rows.Add("Holmes", "Sherlock", "221 Baker Street", "1223", "London");
GridView1.DataSource = x;
GridView1.DataBind();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string text = "";
// Iterate over data
foreach (GridViewRow row in GridView1.Rows)
{
string lastName = GridView1.DataKeys[row.RowIndex]["LastName"] as string;
string firstName = GridView1.DataKeys[row.RowIndex]["FirstName"] as string;
string street = (row.FindControl("txtStreet") as TextBox).Text;
string zip = (row.FindControl("txtZIP") as TextBox).Text;
string city = (row.FindControl("txtCity") as TextBox).Text;
text = text + "<br/>" + HttpUtility.HtmlEncode(string.Format("{0} {1} now lives in {2} {3} {4}", firstName, lastName, street, zip, city));
}
Label1.Text = text;
}
加载页面时网格的样子: 您可以看到,在Street,ZIP和City列中,每行都有正常的文本框。
编辑了一些值并单击按钮后: