4

モバイル番号などのさまざまなパラメーターでレコードを並べ替えたい。、登録日など

私のフォームは次のようになりますここに画像の説明を入力

携帯番号入力後、検索をクリックすると、次の結果が得られます。

ここに画像の説明を入力

ここで、レコードを登録日で並べ替えたいと思います。

レコードをソートするための私のコードは次のとおりです。

private void SearchDate()
    {
        DataTable rt = GetRecords();
        DataView rd = new DataView(rt);
        string SearchRegdate = null;
        if (!String.IsNullOrEmpty(txtdate.Text))
        {
              SearchRegdate = string.Format("{0} '%{1}%'", gvUser.SortExpression, txtdate.Text);

        }
           rd.RowFilter = "registration_date like " + SearchRegdate;
           gvUser.DataSource = rd;
           gvUser.PageSize = 30;
           gvUser.DataBind();
    }

ここで、「System.DateTime および System.String に対して「Like」操作を実行できません」というエラーが表示されます。

解決策はありますか??

4

4 に答える 4

1

次のようなものを使用する前に、日付を文字列に変換する必要があります。

dt.Select("Convert(column1,System.String) like '2013'")

または rd.RowFilter = "Convert(column1,System.String) like " + SearchRegdate;

ここで完全な構文を確認できます:構文リファレンス

于 2013-03-01T10:46:01.023 に答える
0

使用Linq

var rows = (from r in rt.AsEnumerable()
           where SqlFunctions
             .StringConvert(r.Field<DateTime>("registration_date")).Contains("1")
           select r).ToList();

または、データテーブルが必要な場合

DataTable dt = (aboveQuery).CopyToDataTable();
于 2013-03-01T10:52:03.423 に答える
0

まず、構文が間違っていると思います。あなたのステートメントから何が得られるかは、次のようなものです。

registration_date like <user sort expression> '%...%'

likeと フィルター式 の間に何もない場合があります%...%

また、列registration_dateは- あなたはそれを使用してDateTime比較することはできません- そしてこれはエラーが言っていることです. 日付を文字列として含む非表示の計算列を追加し、それを並べ替えることができます。stringlike

于 2013-03-01T10:43:02.893 に答える
0

RowFilter の代わりにLINQを試すことができます。

DateTime を使用した簡単な例:

初期化:

var table = new DataTable("Dates");
var dateColumn = new DataColumn("Date", typeof (DateTime));
table.Columns.Add(dateColumn);

table.BeginLoadData();
table.LoadDataRow(new object[] {new DateTime(2000, 1, 1)}, true);
table.LoadDataRow(new object[] {new DateTime(2000, 1, 2)}, true);
table.LoadDataRow(new object[] {new DateTime(2001, 1, 1)}, true);
table.LoadDataRow(new object[] {new DateTime(2002, 1, 1)}, true);
table.EndLoadData();

検索された日付テキストを含むクエリ:

var someDateText = "2000";

var dataView = (from row in table.AsEnumerable()
                let dateTime = row.Field<DateTime>(0)
                where dateTime.ToString().Contains(someDateText)
                orderby dateTime
                select row).AsDataView();

その後、作成した dataView の RowFilter を使用して、他のフィルターを実行することもできます。

于 2013-03-01T10:47:46.347 に答える