Gridview是用于显示和操作来自各种数据源的数据的控件。
网格视图 网格视图 <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" PagerSettings-Position="TopAndBottom" PagerSettings-Mode="Numeric" PageSize="40" CellPadding="4" DataSourceID="dsEquipmentGridView" ForeColor="#333333" GridLines="Horizontal" Style="font-size: x-small" AutoGenerateColumns="False" DataKeyNames="IREF" OnRowEditing="GridView1_RowEditing" OnRowUpdated="GridView1_RowUpdated" OnSorted="GridView1_Sorted" OnSorting="GridView1_Sorting" OnPageIndexChanged="GridView1_PageIndexChanged1" OnPageIndexChanging="GridView1_PageIndexChanging" OnSelectedIndexChanged="GridView1_SelectedIndexChanged" OnSelectedIndexChanging="GridView1_SelectedIndexChanging" OnRowCommand="GridView1_RowCommand" BorderColor="Black" BorderStyle="Solid" BorderWidth="1px" OnRowCancelingEdit="GridView1_RowCancelingEdit" onload="GridView1_Load" ondatabound="GridView1_DataBound"> <PagerSettings Position="TopAndBottom" /> <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> <Columns> <asp:CommandField ShowDeleteButton="False" ShowSelectButton="true" EditText="QuickEdit" HeaderText="Manage" SelectText="Manage" /> 对于加载的第一页,如果我单击命令字段,它会显示正确的 DataKey 值。 但是,如果我切换到下一页结果,在选择记录时,相应的值不正确。似乎保留了上一页的信息。我该如何克服这个问题? 编辑: 在GridView1_SelectedIndexChanged方法中,我使用了以下内容: // Determine the index of the selected row. int index = GridView1.SelectedIndex; // Display the primary key value of the selected row. HttpContext.Current.Response.Write("The primary key value of the selected row is " + GridView1.DataKeys[index].Value.ToString() + ".<br>"); GridViewRow row = GridView1.Rows[index]; int rowindex = row.RowIndex; HttpContext.Current.Response.Write("rowindex-> " + rowindex.ToString() + "<br>"); int ID = (int)GridView1.DataKeys[row.DataItemIndex - (GridView1.PageIndex * GridView1.PageSize)].Value; HttpContext.Current.Response.Write("row.DataItemIndex" + ID.ToString()+"<br>"); int Userid = Convert.ToInt32(GridView1.DataKeys[index].Value); HttpContext.Current.Response.Write("Userid" + Userid.ToString() + "<br>"); 分页后无法获取正确的值。 使用分页时,我们可以获得准确的行索引(在gridview中从0到totalrows计数) 并且在获取datakey时,我们需要传递当前页面的行索引。 使用下面的行获取当前页面索引并获取数据密钥: // Get the correct row index since there is paging int idx = gridViewRow.DataItemIndex - TestGridView.PageIndex * TestGridView.PageSize; 我可能会迟到。 但对于其他人,我回复这个。 “使用 DataKey 数组之前再次重新绑定 gridview” 它对我有用。 希望它也适用于其他人。 不久前已修复。正在使用第三方 GridView 帮助程序类。这破坏了 GridView 的正常功能。
从启用分页的 GridView 控件中检索所有 GridViewRow 对象
我当前的 aspx 页面上有一个启用分页的 GridView 控件,我需要循环遍历整个行集合/计数来处理选定的记录。 使用我当前的代码,它只会
使用 VB.Net 的标准 .net 2.0 Gridview 的分页问题
我正在使用标准的 .net 2.0 Gridview,它使用 XMLDatasource 来填充网格。 XMLDatasource 的 Data 属性是动态设置的,它允许 gridview 根据输入进行更改...
通过 GridView 分页时保留表单数据 - ASP.NET
我的 ASP.NET 页面上有一个 GridView 控件,当用户执行搜索时,该控件绑定到结果集。 我创建了一个带有 CheckBox 控件的附加 TemplateField 列,以允许用户选择...
我有一个 gridview,其 DataSourceID 属性设置为自定义 ObjectDataSource 对象。当AllowPaging 设置为True 时,GridView 在回发后消失。如果我将AllowPaging 设置为Fals...
我试图让 gridview 手动排序和分页,但没有成功。 问题是,当用户单击他们想要排序的列时,它会对该页面进行排序,但不会对数据源进行排序(da...
我想要在网格视图和列表视图之间切换时有这样的动画。我怎样才能在 Flutter 中做到这一点?
我想向 ASP.NET 页面控件添加一个表达式,例如“显示的数据在 10 到 20 之间”
我在 GridView 中有一个 ASP.NET 页面控件。它正常工作,但我想在页面底部添加一个表达式,该表达式提供有关显示哪些数据的知识。 我在网格中添加了页面代码...
有没有更好的方法来使用ASP.net GridView控件的自定义分页?
好的,这样我就明白了如何使用ASP.net GridView控件的分页了。 您可以设置各种方法来允许控件获取数据的子集以及匹配的记录总数。 这是我的
由CodeBehind数据源填充的GridView的自定义分页/排序?
我正在编写报告页面。在此页面中,有两个日期字段供用户过滤日期,并且 GridView 根据代码隐藏中的这些日期进行填充(当用户单击按钮视图时)...
asp.net 4.0动态数据GridviewPager指定页数
我目前正在一个项目中使用 Dynamic Data Linq to SQL。我想知道是否有一种方法可以更改 GridView 页面上显示的项目数量的可用选项。当前...
ASP.NET GridView 不显示我的 PagerTemplate
我的用户控件中有以下代码: 我的用户控件中有以下代码: <asp:LinqDataSource ID="myLinqDataSource" runat="server" AutoSort="true" ContextTypeName="MyDBContext" TableName="myTable" AutoPage="true" Select="new(Edited, Activity)" Where="UserID == 4" /> <asp:GridView ID="gvTable" runat="server" ShowHeader="true" PageSize="5" AllowPaging="true" AllowSorting="true" DataSourceID="myLinqDataSource" AutoGenerateColumns="false" OnRowDataBound="GridView_DataBound"> <Columns> <asp:BoundField DataField="Edited" HeaderText="Date" DataFormatString="{0:d}" /> <asp:BoundField DataField="Activity" HeaderText="Notes" /> </Columns> <PagerSettings Position="Bottom" /> <PagerStyle BackColor="Black" ForeColor="White" Wrap="false" /> <PagerTemplate> Hello there </PagerTemplate> </asp:GridView> 由于某种原因,无论我做什么,寻呼机根本不会呈现。为什么? 如果我删除 PagerTemplate 标签并在 Mode 中使用一些标准 PagerSettings 设置,它甚至不会显示。我要疯了! 更新: 在进行了一些详尽的谷歌搜索后,我发现我可能正在使用非常旧版本的CSS友好控制适配器。 我相信是这样,因为这个错误也袭击了我!那么我如何知道我正在使用的这些适配器的版本是什么?我什至不知道我在使用它们! 更新2: 问题是我使用的是旧版本的 CSS 友好控制适配器。我下载了最新的源代码,编译了它,使用了新的 DLL 和 .browser 文件,现在它工作得很好。我将这个问题留在这里,以便遇到相同问题的任何人都可以从中找到帮助。 问题是我使用的是旧版本的 CSS 友好控制适配器。我下载了最新的源代码,编译了它,使用了新的 DLL 和 .browser 文件,现在它工作得很好。
我需要使用允许在列标题中进行过滤的网格。 我知道有一些第三方组件需要花钱。 我正在寻找免费/开源的东西......
这更像是一个集体回答而不是一个问题,我只是不知道如何发布它,版主如果你能告诉我是否有这样的事情。 这个问题问死了,然后我
Yii2:使用带有分页功能的 Pjax POST 方法在 Gridview 中搜索
我是 yii2 的初学者,尝试在搜索按钮上使用 Pjax 来搜索 Gridview 中的字段。我已经使用 GET 方法完成此操作,但我想使用 POST 方法完成此操作。那我该如何做到这一点...
我正在使用 flutter_staggered_grid_view: ^0.3.4 构建一个包含 5 个元素(图块)的菜单,我想根据特定布局显示这些元素,下面您将找到所需输出的图像和
我有两个 3d 点云,我知道它们点之间的变换矩阵。然而,两个点云被传递到顶视图投影,其中我忽略 z 轴坐标并且是
向与 SQL 数据源关联的网格视图添加一列 [C#/ASP/Webform]
我的 asp 页面中有一个 gridview,其中数据来自 SQL 数据源(存储过程)。我正在尝试找到一种方法将数据源中没有的列添加到网格视图中:我想要...
在 ASP.NET 3.5 中转换 gridview 中的文本框控件时出错
我有一个非常简单的命令,我只是在网格视图的页脚中找到文本框,并根据它的值我分配一些值。 if (!string.IsNullOrWhiteSpace(((TextBox)gvSession.
我正在开发一个c# asp.net 项目。 我创建了一个 gridview 并将其连接到数据库。我的代码是这样的; 我正在使用 c# asp.net 开发一个项目。 我创建了一个 gridview 并将其连接到数据库。我的代码是这样的; <asp:GridView ID="GridView1" runat="server" class="table table-bordered table table-hover " AutoGenerateColumns="false" HeaderStyle-Height="40px" OnRowCommand="GridView1_RowCommand1" > <Columns> <asp:TemplateField HeaderText="Numune Parçası" > <ItemTemplate> <asp:Literal ID="Literal22" runat="server" Text='<%# Eval("Açıklama") %>'></asp:Literal> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Analiz"> <ItemTemplate> <asp:Literal ID="Literal112" runat="server" Text='<%# Eval("Analiz") %>'></asp:Literal> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Tartım" ItemStyle-Width="10%"> <ItemTemplate> <asp:TextBox id="txttartim" runat="server" class="form-control" ></asp:TextBox> </ItemTemplate> <ItemStyle Width="10%"></ItemStyle> </asp:TemplateField> <asp:TemplateField HeaderText="Birim"> <ItemTemplate> <asp:DropDownList ID="birimlist" class="form-control" runat="server" > <asp:ListItem>g</asp:ListItem> <asp:ListItem>mg</asp:ListItem> <asp:ListItem>ml</asp:ListItem> <asp:ListItem>cm2</asp:ListItem> </asp:DropDownList> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Kaydet"> <ItemTemplate> <asp:LinkButton ID="Btn_Indir" runat="server" class="btn btn-primary btn-sm" Text="Kaydet" CommandName="Open" CommandArgument='<%# Eval("ID") %>' /> </ItemTemplate> </asp:TemplateField> </Columns> <HeaderStyle BackColor="#D14124" CssClass="gridheader" ForeColor="White" HorizontalAlign="Left" /> </asp:GridView> 后面的代码就是这样的 protected void GridView1_RowCommand1(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "Open") { int RowIndex = ((GridViewRow)((LinkButton)e.CommandSource).NamingContainer).RowIndex; string name = ((TextBox)GridView1.Rows[RowIndex].FindControl("txttartim")).Text; DropDownList bir = (DropDownList)GridView1.Rows[RowIndex].FindControl("birimlist"); string birim = bir.SelectedItem.Value; } } 但我的问题是我无法获取所选行中文本框和下拉列表的值。 字符串 name 和 birim 为空。 尝试一下: if (e.CommandName == "Open") { GridViewRow selectedRow = ((GridViewRow)((LinkButton)e.CommandSource).NamingContainer); string name = ((TextBox)selectedRow.FindControl("txttartim")).Text; DropDownList bir = (DropDownList)selectedRow.FindControl("birimlist"); string birim = bir.SelectedItem.Value; } 我解决了问题。 当我在 Page_load 部分编写代码时,它起作用了!它不再为空。 if (!Page.IsPostBack) { load(); .. } 我经常只是放入一个普通的Jane asp.net按钮,并且我不费心使用GV内置命令(例如command)。 但是,您有一个命令,因此您可以触发“row”命令。 “行命令”在选定索引触发之前触发,实际上在选定索引触发之前触发。 我注意到您传递了“ID”。这并不是真正必要的,因为 GV 具有所谓的 DataKeys 功能。该功能允许您获取行(数据库)PK id,但真正好的一点是您不必公开、显示甚至使用隐藏字段或其他任何内容来获取该数据密钥。 (这很好,有几个原因 - 一个是你不必隐藏命令参数来获取数据库 PK 行。另一个巨大的问题是你的数据库 pk 值永远不会暴露在客户端 - 这对于安全性来说非常好)。 因此,请确保您的行事件被触发,并且您应该能够使用它,首先是链接按钮的标记: <asp:TemplateField HeaderText="View" ItemStyle-HorizontalAlign="Center"> <ItemTemplate> <asp:LinkButton ID="cmdView" runat="server" Text="View" CommandName="Open" cssclass="btn btn-info" /> </ItemTemplate> </asp:TemplateField> 注意我如何不担心或通过“ID”。如前所述,datakeys 负责处理这个问题,在 GV def 中,我们有这个: <asp:GridView ID="GVHotels" runat="server" class="table" AutoGenerateColumns="false" DataKeyNames="ID" bla bla bla 所以,现在我们的代码是这样的: protected void GVHotels_RowCommand(object sender, GridViewCommandEventArgs e) { LinkButton lBtn = e.CommandSource as LinkButton; GridViewRow gRow = lBtn.NamingContainer as GridViewRow; int PKID = (int)GVHotels.DataKeys[gRow.RowIndex]["ID"]; Debug.Print("Row index click = " + gRow.RowIndex); Debug.Print("Database PK id = " + PKID); // get combo box for this row DropDownList cbo = gRow.FindControl("cboRating") as DropDownList; Debug.Print("Combo box value = " + cbo.SelectedItem.Value); Debug.Print("Combo box Text = " + cbo.SelectedItem.Text); 输出: Row index click = 7 Database PK id = 68 Combo box value = 2 Combo box Text = Good 因此,使用 datakeys - 因此您不必到处输入额外的属性来获取 PK 行值。 事实上,使用行命令通常更痛苦,您可以转储命令名称来触发该按钮单击。真的很好的是,您可以为 GV 中的每个按钮(或链接按钮)获得一个单独的好命令“代码存根”。 (无需尝试将所有代码推入 row 命令,然后使用一堆 if/then 或“case”语句来运行给定命令的代码)。 所以,我实际上建议你使用这个: <asp:TemplateField HeaderText="View" ItemStyle-HorizontalAlign="Center"> <ItemTemplate> <asp:LinkButton ID="cmdView" runat="server" Text="View" OnClick="cmdView_Click1" cssclass="btn btn-info" /> </ItemTemplate> </asp:TemplateField> 所以,我们所做的就是添加一个常规的点击事件。它不会触发行命令,实际上不会触发 GV 的“选定索引已更改”,但在大多数情况下我不需要它们。所以,现在,如果您有 2 个或 5 个按钮,您只需将它们视为常规按钮即可。 (只需在标记中输入 onclick,然后选择 IntelliSense 弹出的“创建新事件”)。因此,现在我们的按钮代码是单独的,而不是行命令的一部分。我们的代码就变成了这样: protected void cmdView_Click1(object sender, EventArgs e) { LinkButton lBtn = sender as LinkButton; GridViewRow gRow = lBtn.NamingContainer as GridViewRow; int PKID = (int)GVHotels.DataKeys[gRow.RowIndex]["ID"]; Debug.Print("Row index click = " + gRow.RowIndex); Debug.Print("Database PK id = " + PKID); // get combo box for this row DropDownList cbo = gRow.FindControl("cboRating") as DropDownList; Debug.Print("Combo box value = " + cbo.SelectedItem.Value); Debug.Print("Combo box Text = " + cbo.SelectedItem.Text); } 所以,我倾向于不理会行命令 - 最好只进行常规的单击事件。请注意命名容器的使用 - 但其余代码是相同的。我只会使用“commandName”来触发行事件,因为然后 gv 索引更改事件触发 - 这对于突出显示整行很有用 - 但如果你不关心,那么甚至不用担心 CommandName - 只需使用常规点击事件,如上所述,这甚至更好,因为这样每个按钮都会获得 100% 自己的漂亮的小代码存根,就像任何其他按钮点击往往具有的那样。 所以我抓住了一个下拉列表,但你的代码可以这样说: TextBox tBox = gRow.FindControl("txttartim") as TextBox; debug.Print (tBox.Text);