【问题标题】:Insert values in gridview manually using textboxes,loops? ASP.NET C#使用文本框手动在gridview中插入值,循环? ASP.NET C#
【发布时间】:2016-06-18 05:08:25
【问题描述】:

如何手动在 gridview 中插入值。实际上这是我的问题。textboxes 根据gridview 列动态生成。例如,如果 gridview 列是 4,则动态生成 4 textboxes。现在我想当用户在 4 textboxes 中插入值,然后按 submit 按钮,然后在第一行中的 gridview 中插入值。用户在 textboxes 中再次插入值,然后按提交,然后在 gridview 中插入第二行。记住gridview列是动态的。不知道标题。我们可以使用循环在gridview 中插入值。我该怎么做。 这是我的屏幕截图

我们不能使用标题。我再次告诉你。我想使用循环插入值,例如 gridview.[0][0],gridview[0][1] 这只是我的猜测,我不知道。抱歉英语不好。 这是我的保存按钮代码:后面的代码

public void save(object sender, EventArgs e)
{
    string s = Session["num"].ToString();
    int num = Int32.Parse(s);
    DataTable t = (DataTable)Session["table"];
    DataRow row1 = t.NewRow();
    for(int i=0;i<num;i++){
        TextBox tt = (TextBox)(form.FindControl("txtser" + i.ToString()));
        string str= tt.Text + " ";
    }
    t.Rows.Add(row1);
    Session["table"] = t;
    GridView1.EditIndex = -1;
    GridView1.DataSource = t;
    GridView1.DataBind();
}

【问题讨论】:

标签: c# asp.net gridview


【解决方案1】:

您可以使用 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" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 2013-07-29
    • 1970-01-01
    • 2015-12-02
    相关资源
    最近更新 更多