我非常喜欢这里,而且情况有些严重。
我有一个Gridview,我用它来显示后端的数据。我做的是为了插入数据,我在Gridview的顶部做了一个按钮,在gridview中添加数据。
像这样: -
<asp:Button ID="btnAdd" runat="server" CssClass="btn btn-prm" Text="Add" Width="75" CausesValidation="true" ValidationGroup="AddNew" OnClick="btnAdd_Click" />
同样为Edit
部分做了同样的事。
我添加了一个复选框来选择gridview的行。查看我的gridview代码以便更好地理解,
<asp:GridView ID="grdCSRPageData" runat="server" Width="100%" border="1" Style="border: 1px solid #E5E5E5;" CellPadding="3"
AutoGenerateColumns="False" OnDataBound="grdCSRPageData_DataBound" AllowPaging="true" CssClass="hoverTable"
OnPageIndexChanging="grdCSRPageData_PageIndexChanging" DataKeyNames="Id" OnRowDeleting="grdCSRPageData_RowDeleting"
PageSize="5" ShowFooter="true" OnRowEditing="grdCSRPageData_RowEditing" OnRowUpdating="grdCSRPageData_RowUpdating"
OnRowCancelingEdit="grdCSRPageData_RowCancelingEdit">
<AlternatingRowStyle CssClass="k-alt" BackColor="#f5f5f5"/>
<Columns>
<asp:TemplateField HeaderText="Action" HeaderStyle-Width="5%" HeaderStyle-CssClass="k-grid td" >
<ItemTemplate>
<asp:Checkbox ID="chkSelect" runat="server" AutoPostBack="false" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="page_title" HeaderText="Page Title" ItemStyle-Width="30" HeaderStyle-CssClass="k-grid td" />
<asp:BoundField DataField="page_description" HeaderText="Page Description" ItemStyle-Width="30" HeaderStyle-CssClass="k-grid td" />
<asp:BoundField DataField="meta_title" HeaderText="Meta Title" ItemStyle-Width="30" HeaderStyle-CssClass="k-grid td" />
<asp:BoundField DataField="meta_keywords" HeaderText="Meta Keywords" ItemStyle-Width="30" HeaderStyle-CssClass="k-grid td" />
<asp:BoundField DataField="meta_description" HeaderText="Meta Description" ItemStyle-Width="30" HeaderStyle-CssClass="k-grid td" />
<asp:BoundField DataField="Active" HeaderText="Active" ItemStyle-Width="30" HeaderStyle-CssClass="k-grid td" />
<asp:TemplateField HeaderText="Action" HeaderStyle-Width="15%" HeaderStyle-CssClass="k-grid td" >
<ItemTemplate>
<asp:ImageButton ID="btnDelete" AlternateText="Delete" ImageUrl="~/images/delete.png" runat="server" Width="15" Height="15" CommandName="Delete" CommandArgument='<%# Eval("Id") %>' CausesValidation="false" OnClientClick="return confirm('Are you sure you want to delete this record?')" />
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ButtonType="Image" ItemStyle-Width="15" EditImageUrl="~/images/edit.png" ShowEditButton="True" ControlStyle-Width="15" ControlStyle-Height="15" CancelImageUrl="~/images/close.png" UpdateImageUrl="~/images/update.png">
<ControlStyle Height="20px" Width="20px"></ControlStyle>
</asp:CommandField>
</Columns>
</asp:GridView>
现在我的要求是什么。每当我选中任何行的复选框,然后单击“更新”按钮时,应在弹出窗口中打开repsective Row
,其中包含添加新行的现有数据。我试过但不能成功。请帮我解决一下这个。如果您还有其他需要,请告诉我。
感谢!
答案 0 :(得分:5)
以下是使用ajax
的解决方案。当click on update button
jquery代码在checked checkbox
中查找gridview
时。如果发现这会将textboxes
的{{1}}分配给popup div
row
,其中checked
复选框为id
。
您必须hidden field
将update query
存储在update
将运行的基础上,或者您可以使用click
将要发生的任何字段。
现在,当您在弹出的ajax
更新按钮时,会发送一个textboxes
来自webmethod
的更新值并发送到webmethod
。
在update
中,您将运行ajax
查询。当reload
成功执行后,您将changes
该页面gridview
<div id="Popup">
<table>
<tr>
<td>
Category
</td>
<td>
<input type="text" id="Category" />
</td>
</tr>
<tr>
<td>
Items
</td>
<td>
<input type="text" id="items" />
</td>
</tr>
<tr>
<td>
<input type="button" value="Update" onclick="Openselected()" />
</td>
<td><input type="hidden" id="hdnID" /></td>
</tr>
</table>
</div>
}。
弹出式广告
function Openselected()
{
$('table[id$=grdTest] tr').each(function () {
if ($(this).find('input[type=checkbox]').is(':checked')) {
$('#Category').val($(this).children('td').eq('02').text());
$('#items').val($(this).children('td').eq('03').text());
$('#hdnID').val($(this).children('td').eq('01').text());
}
});
}
这不会显示为弹出窗口,但您可以使用任何插件在弹出窗口中显示它,如blockui,fancybox jqueryui对话框或任何可用的插件。
Jquery代码
此函数将在文本框中指定所选行的值并打开弹出窗口。
ajax
此功能会向webmethod
发送reload
来电,并在function UpdateGrid()
{
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "Default.aspx/UpdateDB",
data: JSON.stringify({ category:$('#Category').val() , items: $('#items').val(),id:$('#hdnID').val() }),
dataType: "json",
async: false,
success: function (data) {
$('#Category').val("");
$('#items').val("");
$('#hdnID').val("");
window.location.reload(true);
},
error: function (err) {
alert(err.responseText);
}
});
}
成功[WebMethod]
public static string UpdateDB(string category, string items,int id)
{
//Your logic of updating db.Here i am updating on basis of id you can use any feild of your choice
return "success";
}
页面上发送更改值。
{{1}}
这是webmethod
{{1}}
根据您的要求,这仅适用于一行。
答案 1 :(得分:3)
在复选框选择中,关联一个模态弹出对话框,并在任何命令名称上填充相同的数据。
答案 2 :(得分:3)
是的,我会给它一个裂缝。
在PHP-HTML中,或者只是普通的旧HTML,您可以将data- *属性分配给任何类型的元素。在ASP中,我假设你可以做类似的事情。在这些数据属性中存储您想要用于对话框的数据,将所有元素都赋予类('checkboxDialog'),然后jQuery可以完成剩下的工作。
CSS
.hide {display:none;}
HTML
<div class="dialog-form hide">
<!-- input elements with id's for easy identification -->
</div>
<table>
<tr class="checkboxDialog" data-current="current data in elements like this" data-id=1">
<td><button>Update</button></td>
</tr>
<!-- repeat as necessary -->
</table>
的jQuery
<script>
$(function(){
$('.checkboxDialog').on('click', function(e){ // This attached a click event listener to all matching elements
var selectedObj = $(this);
$('#inputCurrent').val(selectedObj.data('current'));
$('#inputId').val('id'); // etc etc
$('.dialog-form')
.removeClass('hide')
.dialog({ // From the jQuery-ui library, check it out!
buttons: {
Submit: function(){
// You can either submit an actual form, or alter data via AJAX
// and repopulate the row with the new data when the AJAX completes
$(this).close();
},
Cancel: function(){
$(this).close();
}
}
});
});
})
</script>
答案 3 :(得分:2)
使用jQuery和amp;的组合用于满足要求的ASP.NET代码。
(1)点击更新后,通过jQuery获取所有选中(已选中)行的列表。
(2)将每行的商店ID或唯一键(可能是您的案例中的页码ID)作为同一行中的隐藏字段。
(3)现在,为每个选定的行调用javascript window.open()或备用弹出窗口。
(4)要在弹出窗口中填充控件,您可以将其作为查询字符串参数传递,或使用隐藏字段值从后端重新获取它们。您需要创建一个ASP.NET服务来从Backend返回这些值。
答案 4 :(得分:-1)
在弹出窗口中执行以下步骤:
通过添加js函数更新命令字段,如下所示:
<asp:CommandField ButtonType="Image" onClick="showData(<%#RowNo%>)" ItemStyle-Width="15" EditImageUrl="~/images/edit.png" ShowEditButton="True" ControlStyle-Width="15" ControlStyle-Height="15" CancelImageUrl="~/images/close.png" UpdateImageUrl="~/images/update.png">
在包含jquery插件后,按照以下方式编写JS函数:
function showData(rowNo) {
var html = $('#grdCSRPageData>tbody').find('tr:eq(' + rowNo + ')');
//div123 is the test div and one should replace this with required one.
$('#div123').html(html);
$('#div123').show();
};
答案 5 :(得分:-3)
DO it in parts. Use jquery for accessing the checkbox inside the gridview. First give a css class to the checkbox(for helping jquery to find it by this style). Then call the checkbox event handling from the below code-
**if ($('.checkboxCss').prop('checked'))
{
//open the pop up window with the editing fields
}**
Now on the sub`enter code here`mit button click of the pop up window, you can use jquery ajax to call the c# function which do the updation of the record. Here you have to use a static [webmethod] C# function to call it with jquery AJAX.