【问题标题】:Add new row using JavaScript to gridview使用 JavaScript 将新行添加到 gridview
【发布时间】:2014-08-21 19:30:50
【问题描述】:

我有一个网格视图。我使用 JS 动态添加新行,在 GV 中,每行中都有一个图像(addButton),同时单击该图像会调用以下 js。

function AddNewRecord(e) {

    debugger;
    var hfFirstNewf = document.getElementById('ctl14_hfFirstNewf');
    var grd = document.getElementById('ctl14_gvWTM');
    var rowCount = grd.rows.length;
    var tbod = grd.rows[0].parentNode;
    var **newRow** = grd.rows[grd.rows.length - 1].cloneNode(true);
    tbod.appendChild(newRow);

    return false;
}

在调试代码时,newRow.innerHTML 包含以下内容(这是原始代码的一部分)

<SPAN style="WIDTH: 100%; DISPLAY: inline-block" id=ctl14_gvWTM_ctl02_lblSrno>1</SPAN> <INPUT style="BORDER-RIGHT-WIDTH: 0px; WIDTH: 100%; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; HEIGHT: 15px; BORDER-LEFT-WIDTH: 0px" id=ctl14_gvWTM_ctl02_btnADD class=href title="Add another Row" onclick="return AddNew();" src="http://localhost:12294/RIBO/App_Themes/RIBO/Images/AddNew.png" type=image name=ctl14$gvWTM$ctl02$btnADD Text="ADD">

这里**id=ctl14_gvWTM_ctl02_btnADD** ctl02 是生成的所有新行的 ID(当我单击网格的第二行 addButton 时。单击第三行 addButton 时,它将是id=ctl14_gvWTM_ctl03_btnADD 用于第三行和新行)。 问题是在单击它根据原始行(row2 或 row3)操作的新行时。

有什么解决办法吗? or 我可以在使用replace 生成时将innerText text ctl02 更改为新行的新内容吗??

from image1 ,我已经使用那个加图像添加了新行。所有三行都是从第一行新添加的。点击gridview的第4行DUnumber列(you can find the cursor at the bottom round)它显示第一行的建议(处理符号在顶轮 image 2 : 加载第 1 行 DuNumber 的建议,同时单击第 4 行 DuNumber。当从中选择任何内容时,它将加载到第 1 行而不是第 4 行

【问题讨论】:

  • 不清楚为什么要生成ID?无论如何,我没有得到你的目标。所以一旦你通过 javascript 添加一个新行,那又是什么呢?
  • @deostaroll 我没有生成 ID。我在网格中有用户控件(我没有在此处提供)。单击用户控件时,它将显示一个建议表,我们可以从该建议中选择选项。单击新行时(使用该 Js 生成后),它将弹出旧行(从中生成新行)建议。从该建议中选择选项时,它将设置为旧行而不是新行。
  • @@deostroll 当我通过 javascript 进行调试时,它也会为新行提供旧行 ID(内部文本)。
  • 您可能需要在此处发布更多代码,以便我们复制和理解问题。或者,您可以发布一系列描述您的问题的屏幕截图。上面提到的问题,细节不多,很难理解。
  • @deostroll 现在添加了我的问题的屏幕截图。请帮助我

标签: c# javascript jquery asp.net gridview


【解决方案1】:

您需要做几件事。

用户控件设计

  • 您需要embed javascript 以及用户控件。其中的 javascript 将是您调用的函数,用于将该弹出窗口中的数据更新到相关文本框。
  • 您面临的问题是您的脚本设置了错误的文本框。

这里建议的一种技术是将所有内容包装到一个 div 中。因此,您的用户控件标记将具有:

<div>
   <asp:TextBox ID="tbx1" runat="server" ...></asp:TextBox>
   <%-- other stuff --%>
</div>

假设在上面的代码中某处有一个按钮(为了简单起见,假设没有更多的嵌套 div)。当您单击它时,您需要对该按钮的引用。为此修改javascript函数如下:

function AddNewRecord(ctrl) {

    var divContainer = ctrl.parentNode; // reference to the containing div.     
    //to get textbox
    var inputFields = divContainer.getElementsByTagName('input');
    //usually it would be the first one...
    var tbx = inputFields[0];
    console.log(tbx.value); //prints value of textbox.

}

并且函数调用如下:

<input type="button" onclick="AddNewRecord(this)" ... />

【讨论】:

  • 你所说的都已经完成了。问题是复制的新行控件的 clientId 和源行控件都具有相同的 ID,因此选择值将在源行控件中修复
  • 那么你是通过js添加新行吗...?
  • 但是向 gridview 添加新行的推荐方法是完全在服务器端进行。我们通常使用数据表,将其存储到视图状态中,然后向其中添加新行,然后将其绑定到网格视图...codeproject.com/Articles/467788/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-02
  • 1970-01-01
  • 2011-08-29
  • 2011-10-05
  • 1970-01-01
相关资源
最近更新 更多