使用文本框,循环手动在gridview中插入值? ASP.NET C#

时间:2016-06-17 19:10:52

标签: c# asp.net gridview

如何手动在gridview中插入值。实际上这是我的问题。<virtual-host>根据textboxes列动态生成。例如,如果gridview列为4,则动态生成4 gridview 。当我想要用户在4 textboxes中插入值并按textboxes按钮然后在第一行的submit中插入值时,我想要。再次在gridview中插入值,然后按提交然后按在textboxes中插入了第二行。请记住gridview列是动态的。没有关于header的想法。我们可以通过使用loop在gridview中插入值。我可以这样做。 这是我的屏幕截图IMG-LINK

我们不能用户头。我再次告诉你。我使用循环来插入值gridview这只是我的猜测我不知道。抱歉英语不好。 这是我的保存按钮代码:后面的代码

gridview.[0][0],gridview[0][1]

1 个答案:

答案 0 :(得分:0)

您可以使用JavaScript将输入的行数据保存到HiddenField,然后使用它的值将新行添加到代码隐藏中的网格数据源。

<强> JS

function setRowData() {
    var hdn1 = document.getElementById('hdn1');
    var gv1 = document.getElementById('gv1');
    var cols = gv1.rows[0].cells;

    for (var i = 0; i < cols.length; i++) {
        var col = cols[i].innerHTML; // column name
        var tb = document.getElementById(col); // Column1, Column2, ...
        hdn1.value += col + ':' + tb.value; // key:value pair
        hdn1.value += '~'; // separator
    }

    // remove separator at the end
    hdn1.value = hdn1.value.substring(0, hdn1.value.length - 1);
}

<强> C#

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        BindGrid();
    }
}

private void BindGrid()
{
    DataTable dt;

    if (Session["dt"] != null) // Submit
    {
        dt = Session["dt"] as DataTable;
    }
    else // !IsPostBack
    {
        dt = GetSampleData();
    }

    gv1.DataSource = dt;
    gv1.DataBind();

    GenerateTextBoxes(dt);

    Session["dt"] = dt;
}

protected void Submit_Click(object sender, EventArgs e)
{
    string[] keyValue;

    var dt = Session["dt"] as DataTable;
    var dr = dt.NewRow();
    var data = hdn1.Value; // JS set this as "Column1:value1~Column2:value12"
    var pairs = data.Split('~');

    foreach (var pair in pairs)
    { 
        keyValue = pair.Split(':');
        dr[keyValue[0]] = keyValue[1];
    }

    dt.Rows.Add(dr);
    hdn1.Value = null;
    Session["dt"] = dt;
    BindGrid();
}

private void GenerateTextBoxes(DataTable dt)
{
    foreach (DataColumn col in dt.Columns)
    {
        pn1.Controls.Add(new TextBox { ID = col.ColumnName });
    }
}

private DataTable GetSampleData()
{
    var dt = new DataTable();
    dt.Columns.Add("Column1", typeof(string));
    dt.Columns.Add("Column2", typeof(string));

    var dr = dt.NewRow();
    dr["Column1"] = "Think 2ce";
    dr["Column2"] = "Code 1ce";

    dt.Rows.Add(dr);

    return dt;
}

<强> ASPX

<asp:GridView runat="server" ID="gv1" />
<asp:Panel runat="server" ID="pn1">
    <asp:HiddenField runat="server" ID="hdn1" />
</asp:Panel>
<asp:Button Text="Submit" runat="server" ID="btn1" OnClientClick="setRowData()" OnClick="Submit_Click" />