将数据从多行发送到c#asp.net webform中的多个文本框

时间:2017-02-26 03:21:05

标签: c# asp.net

我有一个查询我的数据库并返回数据的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();
}

1 个答案:

答案 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;
}

加载页面时网格的样子: What the grid looks like when loading the page 您可以看到,在Street,ZIP和City列中,每行都有正常的文本框。

编辑了一些值并单击按钮后:

After editing some values and clicking the button