所以我厌倦了使用GridView的Bound Fields。我想自定义网格,以便我可以: 答:保持打开的文本框可编辑而无需将行切换到编辑模式。 B:启用逐行更新。例如,我更改行上的值,并在同一行上单击Update链接以将我的更改提交回数据库。这部分是为了允许用户使用Update All尝试他们的保存/提交,然后当GridView中出现错误时,他们可以修复错误,提交错误并转移到下一个错误。他们没有失去任何工作或进步。我通过跟踪原始值的隐藏单元管理取消功能和验证。 C:支持"全部更新"链接。所以我可以更改多行,然后单击“全部更新”。
一般"减少点击次数"事情,我会承认,只是看看我能做些什么......
然后我点击排序和分页......尖叫停止。我到目前为止找到的最佳信息来自以下链接。
不幸的是,它对我不起作用,因为我在PostBack上的GridView数据源中不断返回NULL。
这是我的GridView的样子。
<asp:GridView ID="gridview1" runat="server" ClientIDMode="Static" AutoGenerateColumns="false"
AutoGenerateDeleteButton="false" AutoGenerateEditButton="false"
CellPadding="4" DataKeyNames="RecordID" PageSize="15" width="500px"
OnRowCommand="gridview1_RowCommand">
<Columns>
<%--RecordID column must remain the first column for accurate functionality.--%>
<asp:BoundField DataField="RecordID" HeaderText="Record ID" ReadOnly="FALSE" Visible="false" />
<asp:TemplateField HeaderStyle-CssClass="GridViewColHdrCentered" ItemStyle-CssClass="GridViewTextBoxCentering">
<HeaderTemplate>
<asp:LinkButton ID="btnUpdateAll" runat="server" Text="Update All" OnClick="btnUpdateAll_Click"></asp:LinkButton>
</HeaderTemplate>
<ItemTemplate>
<asp:LinkButton ID="btnUpdate" runat="server" Text="Update" CssClass="GridViewTextBoxCentering" CommandName="UpdateCUST" CommandArgument='<%# Bind("RecordID") %>'></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderStyle-CssClass="GridViewColHdrCentered" ItemStyle-CssClass="GridViewTextBoxCentering">
<HeaderTemplate>
<asp:Label ID="lblCancel" runat="server" Text=""></asp:Label>
</HeaderTemplate>
<ItemTemplate>
<asp:LinkButton ID="btnCancel" runat="server" Text="Cancel" CssClass="GridViewTextBoxCentering" CommandName="CancelCUST" CommandArgument='<%# Bind("RecordID") %>'></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderStyle-CssClass="GridViewColHdrCentered">
<HeaderTemplate>
<asp:Label ID="lblField1" runat="server" Text="Business Area"></asp:Label>
</HeaderTemplate>
<ItemTemplate>
<asp:TextBox ID="txtbxField1" ClientIDMode="Static" runat="server" Width="98%" CssClass="GridViewTextBoxCenteringNoBorder" Text='<%# Bind("Field1") %>' onchange="javascript: RowTextChanged( this )" ></asp:TextBox>
<asp:Label ID="txtbxValidationField1" ClientIDMode="Static" runat="server" Text='<%# Bind("Field1") %>' CssClass="GridViewHiddenCell"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderStyle-CssClass="GridViewColHdrCentered">
<HeaderTemplate>
<asp:Label ID="lblField2" runat="server" Text="Field2"></asp:Label>
</HeaderTemplate>
<ItemTemplate>
<asp:TextBox ID="txtbxField2" ClientIDMode="Static" runat="server" Width="98%" CssClass="GridViewTextBoxCenteringNoBorder" Text='<%# Bind("Field2") %>' onchange="javascript: RowTextChanged( this )" > </asp:TextBox>
<asp:Label ID="txtbxValidationField2" ClientIDMode="Static" runat="server" Text='<%# Bind("Field2") %>' CssClass="GridViewHiddenCell"></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderStyle-CssClass="GridViewColHdrCentered">
<HeaderTemplate>
<asp:Label ID="lblValidation" runat="server" Text="Validation"></asp:Label>
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblValidationOut" ClientIDMode="Static" runat="server" CssClass="GridViewTextBoxCentering"> </asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderStyle-CssClass="GridViewColHdrCentered" ItemStyle-CssClass="GridViewTextBoxCentering">
<HeaderTemplate>
<asp:Label ID="lblDelete" runat="server" Text=""></asp:Label>
</HeaderTemplate>
<ItemTemplate>
<asp:LinkButton ID="btnDelete" runat="server" Text="Delete" CssClass="GridViewTextBoxCentering" CommandName="DeleteCUST" CommandArgument='<%# Bind("RecordID") %>'></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
我的绑定是一个简单的过程
gridview1.DataSource = MyDataSet;
gridview1.DataBind();
但由于我没有使用<asp:SQLDataSource>
之类的东西,我似乎无法让Sorting正常工作。我检查了GridView.Rows,奇妙的是GridViewRowCollection似乎没有排序功能。
在有人建议之前,通过重新查询数据进行排序会打败我正在寻找的行为。具体要求B,能够在网格上进行现场更新。