1

グリッドの同じ列にある 2 つの異なる (データ ピッカー) をフィルター処理しようとしています。これら 2 つのフィールドを使用してコマンドに到達しようとします。フィルタリング プロセス全体はコード ビハインドで実行されており、これまでのところ、グリッド内の他のフィールドに対して機能しています。しかし、奇妙な例外が発生しています。

{"引数の型 'Edm.DateTime' と 'Edm.String' は、この操作と互換性がありません。ほぼ大なりまたは等しい式、6 行目、15 列目です。"}

DBでは、フィールドは日時であり、単一の列です

私のコード:

                    <telerik:GridBoundColumn DataField="EntryDate" DataType="System.DateTime" DataFormatString="{0:dd/MM/yyyy}" FilterControlAltText="Filter EntryDate column"
                        HeaderText="Date" SortExpression="EntryDate" UniqueName="EntryDate" FilterControlWidth="50px">
                        <FilterTemplate>
                            From
                            <telerik:RadDatePicker ID="FromOrderDatePicker" runat="server" Width="100px" AutoPostBack="true"
                                OnSelectedDateChanged="FromOrderDatePicker_SelectedDateChanged" OnPreRender="FromOrderDatePicker_PreRender" />
                            to
                            <telerik:RadDatePicker ID="ToOrderDatePicker" runat="server" Width="100px" AutoPostBack="true"
                                OnSelectedDateChanged="ToOrderDatePicker_SelectedDateChanged" OnPreRender="ToOrderDatePicker_PreRender" />

                        </FilterTemplate>
                    </telerik:GridBoundColumn> 

コードビハインド:

     protected void FromOrderDatePicker_SelectedDateChanged(object sender, Telerik.Web.UI.Calendar.SelectedDateChangedEventArgs e)
            {
                RadDatePicker picker = sender as RadDatePicker;
                ViewState["FromDatePicker"] = DateTimeToString(picker.SelectedDate.Value);

                ExpressionChanged();
            }
            protected void FromOrderDatePicker_PreRender(object sender, EventArgs e)
            {
                if (ViewState["FromDatePicker"] != null)
                {
                    RadDatePicker picker = sender as RadDatePicker;
                    picker.SelectedDate = StringToDateTime(ViewState["FromDatePicker"].ToString());
                }
            }


  private string DateTimeToString(DateTime dt)
    {
        return dt.Month + "/" + dt.Day + "/" + dt.Year;
    }
    private DateTime StringToDateTime(string s)
    {
        string[] dts = s.Split('/');
        DateTime dt = new DateTime(Int32.Parse(dts[2]), Int32.Parse(dts[0]), Int32.Parse(dts[1]));
        return dt;
    }

コードを投稿するのは冗長です(toDatePickerの場合)

 private void ExpressionChanged()
    {
        //reset
        TimeReportGrid.MasterTableView.FilterExpression = null;
        TimeReportGrid.MasterTableView.Rebind();


        if (ViewState["FromDatePicker"] != null &&
            ViewState["ToDatePicker"] != null &&
            ViewState["FromDatePicker"].ToString() != "" &&
            ViewState["ToDatePicker"].ToString() != "")
        {
            TimeReportGrid.MasterTableView.FilterExpression += "(it.EntryDate >= '" + ViewState["FromDatePicker"].ToString() + "') AND (it.EntryDate <= '" + ViewState["ToDatePicker"].ToString() + "')";
        }

何か問題があれば遠慮なく聞いてください

助けてくれてありがとう!

4

1 に答える 1