1
create procedure St_Proc_GetUserReportforCurrentDayTask                  
@userID int                  
as                  
    Begin                  
        set NoCount on;                  
        DECLARE @TODAY DATE                    
        SET @TODAY = CONVERT(VARCHAR(10), GETDATE(), 111)                  
        select  CONVERT(VARCHAR,production.CalendarDate,101) + RIGHT (CONVERT(VARCHAR,production.CalendarDate , 100 ) ,7) as Date,                   
        RegionAndProjectInfo.RegionProjectName as Region ,                  
        County.CountyName as County,                  
        WorkType.WorkTypeName as WorkType,                  
        Task.TaskName as Task,      
        Production.VolumeProcessed as 'Volumes Processed',                  
        Production.TimeSpent as 'Duration(HH:MM)'                  
        from Production                   
        inner join RegionAndProjectInfo                  
        on                  
        RegionAndProjectInfo.RegionProjectID=Production.RegionProjectID                  
        inner join County                  
        on                   
        County.CountyID=Production.CountyID                  
        inner join WorkType                  
        on                  
        WorkType.WorkTypeID=Production.WorkTypeID                  
        inner join Task                  
        on                  
        Task.TaskID=Production.TaskID                  
        where Production.UserID=@userID and CalendarDate >= @TODAY                  
    End 

これは私のストアド プロシージャであり、このストアド プロシージャを実行し、結果をデータセットに保存してから、グリッドをこのデータセットにバインドしています。

private void BindGridOnPageLoad()
    {
        _production = new EmployeeQuotientCL.Production();
        _userEcode = Convert.ToString(Session["UserID"]);
        int _userID = _production.GetUserIDFromDB(_userEcode);
        dsUserTaskDetails = _production.GetTabularUsertaskDetails(_userID);
        BindGridView(dsUserTaskDetails);
    }

ここまではすべて問題ありません。次に、グリッド ビューのフッターに期間 (HH:MM) の合計を表示する必要があります。ページに次のコードを追加しました。

<div id="gridview">
            <asp:GridView ID="GVUserEnteredDetails" runat="server" ShowFooter="true" CssClass="mGrid"  CellSpacing="2"   onselectedindexchanged="GVUserEnteredDetails_SelectedIndexChanged" onrowdatabound="GridView1_RowDataBound">                  
            </asp:GridView>

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            tp += Convert.ToDecimal(((DataRowView)e.Row.DataItem).Row["[Duration(HH:MM)]"]);
        }
        if (e.Row.RowType == DataControlRowType.Footer)
        {
            e.Row.Cells[0].Text = "Total Hours : ";
            e.Row.Cells[1].Text = tp.ToString("c");
            e.Row.Cells[0].HorizontalAlign = HorizontalAlign.Right;
            e.Row.Cells[1].HorizontalAlign = HorizontalAlign.Right;
            e.Row.Font.Bold = true;

        }
    }

しかし、デバッグ中にこのエラーが発生しました:-「DataBinding: 'System.Data.DataRowView' には 'Duration' という名前のプロパティが含まれていません。」私がやっている間違いとそれを修正する方法は何ですか?どんな提案や助けも私にとって役に立ちます。

スタックトレース:-

[ArgumentException: 列 '[Duration(HH:MM)]' はテーブル Table に属していません] System.Data.DataRow.GetDataColumn(String columnName) +2124943 System.Data.DataRow.get_Item(String columnName) +13 EQ. C:\Users\dsingh\Documents\Visual Studio 2010\Projects\EQ\EQ\Associates\Production.aspx.cs:112 の Associates.Production.GridView1_RowDataBound (オブジェクト送信者、GridViewRowEventArgs e) System.Web.UI.WebControls.GridView .OnRowDataBound(GridViewRowEventArgs e) +115 System.Web.UI.WebControls.GridView.CreateRow(Int32 rowIndex, Int32 dataSourceIndex, DataControlRowType rowType, DataControlRowState rowState, Boolean dataBind, Object dataItem, DataControlField[] fields, TableRowCollection rows, PagedDataSource pagedDataSource) + 181 System.Web.UI.WebControls.GridView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding) +3896 システム。Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable データ) +66 System.Web.UI.WebControls.GridView.PerformDataBinding(IEnumerable データ) +14 System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable データ) +128 システム.Web.UI.DataSourceView.Select(DataSourceSelectArguments 引数、DataSourceViewSelectCallback コールバック) +33 System.Web.UI.WebControls.DataBoundControl.PerformSelect() +143 System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +74 System.Web .UI.WebControls.GridView.DataBind() +4 EQ.Associates.Production.BindGridView(DataSet ds) in C:\Users\dsingh\Documents\Visual Studio 2010\Projects\EQ\EQ\Associates\Production.aspx.cs :603 EQ.Associates.Production.BindGridOnPageLoad() C:\Users\dsingh\Documents\Visual Studio 2010\Projects\EQ\EQ\Associates\Production.aspx.cs:C:\Users\dsingh\Documents\Visual Studio 2010\Projects\EQ\EQ\Associates\Production.aspx.cs:78 の 593 EQ.Associates.Production.Page_Load (オブジェクト送信者、EventArgs e) System.Web.Util。 CalliHelper.EventArgFunctionCaller(IntPtr fp、オブジェクト o、オブジェクト t、EventArgs e) +14 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(オブジェクト送信者、EventArgs e) +35 System.Web.UI.Control.OnLoad(EventArgs e) + 91 System.Web.UI.Control.LoadRecursive() +74 System.Web.UI.Page.ProcessRequestMain(ブール値 includeStagesBeforeAsyncPoint、ブール値 includeStagesAfterAsyncPoint) +2207CalliEventHandlerDelegateProxy.Callback(オブジェクト送信者、EventArgs e) +35 System.Web.UI.Control.OnLoad(EventArgs e) +91 System.Web.UI.Control.LoadRecursive() +74 System.Web.UI.Page.ProcessRequestMain(ブール値 includeStagesBeforeAsyncPoint、ブール値 includeStagesAfterAsyncPoint) +2207CalliEventHandlerDelegateProxy.Callback(オブジェクト送信者、EventArgs e) +35 System.Web.UI.Control.OnLoad(EventArgs e) +91 System.Web.UI.Control.LoadRecursive() +74 System.Web.UI.Page.ProcessRequestMain(ブール値 includeStagesBeforeAsyncPoint、ブール値 includeStagesAfterAsyncPoint) +2207

4

2 に答える 2

1

コメントで述べたように、HH:mm として表したデータの Decimal 解析で問題に直面しています。

TimeSpanこれらすべての値を合計するには、小数の代わりに a を使用する必要があります。(TimeSpan4.0からの正確な機能を解析していますが、それより古いバージョンを使用している場合)

このやり方でやってみる

TimeSpan ts = DateTime.ParseExact("02:30", "HH:mm", CultureInfo.InvariantCulture).TimeOfDay;
// instead of 02:30 you would have the string from your column passed in

// you can add up the values in this fashion
ts.Add(DateTime.ParseExact("08:30", "HH:mm", CultureInfo.InvariantCulture).TimeOfDay);

選択した形式で表示するために使用できる結果のタイムスパンには、日数も含まれているか、常に表示できますts.TotalMinutes

これがあなたが探していたものであることを願っています。それ以外の場合は、関連する部分を更新してください

于 2012-07-16T10:42:46.927 に答える
0

特殊文字が含まれているため、列名を角かっこで囲んでみてください。お気に入り、

 tp += Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, "[Duration(HH:MM)]"));
于 2012-07-13T11:04:26.437 に答える