javascript - 使用 C# 对 Gridview 表进行排序
问题描述
目前,我需要对 Gridview 表中的一列进行排序。gridview 表中的数据是从 SharePoint 列表中检索的,而不是从 SQL 数据库中检索的。
我不知道我的代码有什么问题,并且在单击列标题对其进行排序后,该列似乎没有响应。
任何人都可以帮助解决这个问题吗?=(
下面是我对“请求 ID”列进行排序的代码。
<tr>
<td class="grid-td">
<asp:GridView ID="gridSubmittedRequests" runat="server" CellPadding="4" ForeColor="#333333" GridLines="Both" AutoGenerateColumns="false" AllowPaging="true" AllowSorting="true" OnPageIndexChanging="gridSubmittedRequests_PageIndexChanging" OnSorting="gridView_Sorting" PageSize="10" CssClass="grid-format">
<Columns>
<asp:BoundField HeaderText="Request ID" DataField="ID" SortExpression="ID" />
<asp:BoundField HeaderText="Title" DataField="Title" />
<asp:BoundField HeaderText="Status" DataField="clRequestStatus" />
<asp:BoundField HeaderText="Reason for Rejection" DataField="clReasonForRejection" />
<asp:BoundField HeaderText="Comments" DataField="clApproverComments" />
<asp:BoundField HeaderText="Date Created" DataField="Created" DataFormatString="{0:dd/MM/yyyy}" />
<asp:HyperLinkField DataNavigateUrlFields="clGeneralFormViewLink" HeaderText="Request Link" Text="View Request" />
</Columns>
<AlternatingRowStyle BackColor="White" />
<EditRowStyle BackColor="#2461BF" />
<FooterStyle BackColor="#0072c6" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#0072c6" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#EFF3FB" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<SortedAscendingCellStyle BackColor="#F5F7FB" />
<SortedAscendingHeaderStyle BackColor="#6D95E1" />
<SortedDescendingCellStyle BackColor="#E9EBEF" />
<SortedDescendingHeaderStyle BackColor="#4870BE" />
</asp:GridView>
<asp:Label ID="lblSubmittedRequestNoRecords" runat="server" Visible="false" CssClass="err-msg"></asp:Label>
</td>
</tr>
using System;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
using CL.SPEngine;
using CL.Common.Data;
using Microsoft.SharePoint.Workflow;
namespace CL.MDM.WebParts
{
public partial class RequestorDashboardUserControl : UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack == false)
{
this.BindGrid();
}
}
private void BindGrid()
{
try
{
string currentUserMail = SPContext.Current.Web.CurrentUser.Email;
#region Draft request query and data binding
string draftQuery = "<OrderBy><FieldRef Name='Created' Ascending='FALSE'/></OrderBy><Where><And><Eq><FieldRef Name='Author'/><Value Type='Integer'><UserID Type='Integer'/></Value></Eq><Eq><FieldRef Name='" + FieldNames.IsDraft + "'/><Value Type='Boolean'>1</Value></Eq></And></Where>";
string draftViewFields = "<FieldRef Name='" + FieldNames.Title + "' /><FieldRef Name='" + FieldNames.Created + "' /><FieldRef Name='" + FieldNames.RequestLink + "' /><FieldRef Name='" + FieldNames.ID + "' /><FieldRef Name='" + FieldNames.GeneralFormViewLink + "' />";
DataTable dtMyDraftRequests = this.GetRequestData(draftQuery, draftViewFields);
if (dtMyDraftRequests != null)
{
this.BindDraftGrid(dtMyDraftRequests);
}
else
{
lblDraftRequestNoRecords.Visible = true;
lblDraftRequestNoRecords.Text = "No draft requests found";
}
#endregion
#region Submitted request query and data binding
string submittedQuery = "<OrderBy><FieldRef Name='Created' Ascending='FALSE'/></OrderBy><Where><And><Eq><FieldRef Name='Author'/><Value Type='Integer'><UserID Type='Integer'/></Value></Eq><Eq><FieldRef Name='" + FieldNames.IsDraft + "'/><Value Type='Boolean'>0</Value></Eq></And></Where>";
string submittedViewFields = "<FieldRef Name='" + FieldNames.Title + "' /><FieldRef Name='" + FieldNames.RequestStatus + "' /><FieldRef Name='" + FieldNames.Created + "' /><FieldRef Name='" + FieldNames.RequestLink + "' /><FieldRef Name='" + FieldNames.ID + "' /><FieldRef Name='" + FieldNames.GeneralFormViewLink + "' /><FieldRef Name='" + FieldNames.ReasonForRejection + "' /><FieldRef Name='" + FieldNames.ApproverComments + "' />";
DataTable dtMySubmittedRequests = this.GetRequestData(submittedQuery, submittedViewFields);
if (dtMySubmittedRequests != null)
{
this.BindSubmittedGrid(dtMySubmittedRequests);
}
else
{
lblSubmittedRequestNoRecords.Visible = true;
lblSubmittedRequestNoRecords.Text = "No submitted requests found";
}
#endregion
}
catch (Exception ex)
{
MDMLogger.Log(TraceSeverity.Unexpected, EventSeverity.Error, "CL.MDM RequestorDashboard BindGrid : Error " + ex.Message);
}
}
/// <summary>
/// This function is used to get data from Master data requests list. It will accept query and view fields as parameters
/// It will convert collection of list items to data table.
/// </summary>
/// <param name="query">CAML query in string format to retrieve data from list</param>
/// <param name="viewFields">View fields to retrieve from the list</param>
/// <returns>Data table of retrieved items</returns>
private DataTable GetRequestData(string query, string viewFields)
{
DataTable dtMyRequests = null;
try
{
//Getting Master Data Requests list
SPList mdrList = SPExtension.TryGetListByUrl(SPContext.Current.Web.Lists, Lists.MasterDataRequestForm);
if (mdrList != null)
{
//Querying list to get required data
SPQuery myRequestQuery = new SPQuery();
myRequestQuery.Query = query;
myRequestQuery.ViewFields = viewFields;
//Getting items and converting those items to Data Table
SPListItemCollection myRequests = mdrList.GetItems(myRequestQuery);
dtMyRequests = new DataTable();
dtMyRequests = myRequests.GetDataTable();
}
}
catch (Exception ex)
{
MDMLogger.Log(TraceSeverity.Unexpected, EventSeverity.Error, "CL.MDM RequestorDashboard GetRequestData : Error " + ex.Message);
}
return dtMyRequests;
}
/// <summary>
/// This function will bind draft request grid
/// </summary>
/// <param name="dtSource">Data source for grid</param>
private void BindDraftGrid(DataTable dtSource)
{
try
{
DataTable dtFinal = AddEditColumn(dtSource);
gridDraftRequests.DataSource = dtFinal;
gridDraftRequests.DataBind();
}
catch (Exception ex)
{
MDMLogger.Log(TraceSeverity.Unexpected, EventSeverity.Error, "CL.MDM RequestorDashboard BindDraftGrid : Error " + ex.Message);
}
}
/// <summary>
/// This function will bind submitted request grid
/// </summary>
/// <param name="dtSource">Data source for grid</param>
private void BindSubmittedGrid(DataTable dtSource)
{
try
{
DataTable dtSubmittedRequests = GetWrokflowStatus(dtSource);
gridSubmittedRequests.DataSource = dtSubmittedRequests;
gridSubmittedRequests.DataBind();
}
catch (Exception ex)
{
MDMLogger.Log(TraceSeverity.Unexpected, EventSeverity.Error, "CL.MDM RequestorDashboard BindSubmittedGrid : Error " + ex.Message);
}
}
private string GetSortDirection(string column)
{
// By default, set the sort direction to descending.
string sortDirection = "DESC";
// Retrieve the last column that was sorted.
string sortExpression = ViewState["SortExpression"] as string;
if (sortExpression != null)
{
// Check if the same column is being sorted.
// Otherwise, the default value can be returned.
if (sortExpression == column)
{
string lastDirection = ViewState["SortDirection"] as string;
if ((lastDirection != null) && (lastDirection == "DESC"))
{
sortDirection = "ASC";
}
}
}
// Save new values in ViewState.
ViewState["SortDirection"] = sortDirection;
ViewState["SortExpression"] = column;
return sortDirection;
}
protected void gridView_Sorting(object sender, GridViewSortEventArgs e)
{
DataTable dataTable = gridSubmittedRequests.DataSource as DataTable;
if (dataTable != null)
{
DataView dataView = new DataView(dataTable);
//dataView.Sort = e.SortExpression + " " + ConvertSortDirectionToSql(e.SortDirection);
dataView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
gridSubmittedRequests.DataSource = dataView;
gridSubmittedRequests.DataBind();
}
}
protected void gridSubmittedRequests_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gridSubmittedRequests.PageIndex = e.NewPageIndex;
this.BindGrid();
}
protected void gridDraftRequests_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gridDraftRequests.PageIndex = e.NewPageIndex;
this.BindGrid();
}
private DataTable AddEditColumn(DataTable dtSource)
{
dtSource.Columns.Add(GeneralConstants.EditLinkColumn);
for (int counter = 0; counter < dtSource.Rows.Count; counter++)
{
string editLink = string.Format(GeneralConstants.GeneralFormEditLinkUrl, SPContext.Current.Web.Url.TrimEnd('/'), Convert.ToString(dtSource.Rows[counter][FieldNames.ID]));
dtSource.Rows[counter][GeneralConstants.EditLinkColumn] = editLink;
}
return dtSource;
}
private DataTable GetWrokflowStatus(DataTable dtSource)
{
SPList mdmList = SPExtension.TryGetListByUrl(SPContext.Current.Web.Lists, Lists.MasterDataRequestForm);
if (mdmList != null)
{
for (int counter = 0; counter < dtSource.Rows.Count; counter++)
{
string itemID = Convert.ToString(dtSource.Rows[counter][FieldNames.ID]);
SPListItem mdmItem = mdmList.GetItemById(Convert.ToInt32(itemID));
if (SPContext.Current.Site.WorkflowManager.GetItemWorkflows(mdmItem).Count > 0)
{
SPWorkflow workflow = SPContext.Current.Site.WorkflowManager.GetItemWorkflows(mdmItem)[0];
if (workflow.ParentAssociation.Name.Contains(GeneralConstants.WorkflowName))
{
if (workflow.InternalState.ToString().Contains(SPWorkflowState.Terminated.ToString()))
{
dtSource.Rows[counter][FieldNames.RequestStatus] = "Error occured / Workflow Terminated";
}
else if (workflow.InternalState.ToString().Contains(SPWorkflowState.Faulting.ToString()))
{
dtSource.Rows[counter][FieldNames.RequestStatus] = "Error occured / Workflow Error";
}
}
}
}
}
return dtSource;
}
}
}
解决方案
推荐阅读
- java - 如果我们知道它的一个变量或参数,如何访问对象?
- kdb - 如何测量插入时间?
- jquery - React 中的软滚动顶升
- java - Java 扫描程序无法在循环中正常工作
- javascript - 删除 jQuery 和 JavaScript 中包含特定文本的所有标签
- microsoft-cognitive - 学术搜索 API 不返回任何实体
- node.js - Sequelize bulkCreate 内部事务不返回 id
- c# - Devexpress - 更改下拉列表中的值
- java - Http请求上的Spring Kafka监听器
- kubernetes - 与 Pod 一起自动创建服务