0

datagridviewを含むフォームがあり、このdataGridViewをDBにバインドし、関数Bind(string sqlQuery)を使用しています。この行を呼び出すと、datagridViewはデータで埋められます。

Bind("SELECT title,description,(CASE WHEN DATEDIFF(deadline,CURDATE()) > 0 THEN CONCAT('Dans ',DATEDIFF(deadline,CURDATE()), ' Jours') WHEN DATEDIFF(deadline,CURDATE()) = 0 THEN CONCAT('Demain') ELSE CONCAT('Expiré depuis ', DATEDIFF(deadline,CURDATE()) * -1, ' Jours') END),progress FROM taches WHERE 1");

データはdataGridViewに正しく入力されています:

問題:各columnHeaderをクリックすると、列ヘッダーをクリックした場合を除いて、データが(昇順または降順で)並べ替えられdeadline、アプリケーションが動作を停止し、次のような例外が発生します。

[(CASE WHEN DATEDIFF(deadline isn't a valid Sort string entry

列をクリックしたときに列を並べ替え可能にするにはどうすればよいですか、少なくともこの例外がスローされないようにするにはどうすればよいですか?

「期限」列に含めることができるさまざまな値は次のとおりです。

Dans X Jours
Expiré depuis X Jours
Demain

ここでDans X Jours>>DemainExpiré depuis X Jours

Xは日数を表す数値です!

この列を例外なしでソート可能にするにはどうすればよいですか?

4

1 に答える 1

2

以下を使用してみてください(コピー/貼り付けを簡単にするためにフォーマットしていません)。

Bind("SELECT title,description,(CASE WHEN DATEDIFF(deadline,CURDATE()) > 0 THEN CONCAT('Dans ',DATEDIFF(deadline,CURDATE()), ' Jours') WHEN DATEDIFF(deadline,CURDATE()) = 0 THEN CONCAT('Demain') ELSE CONCAT('Expiré depuis ', DATEDIFF(deadline,CURDATE()) * -1, ' Jours') END) as deadline,progress FROM taches WHERE 1");

SQLクエリでは、列の列名を指定する必要がありdeadlineます(以下はフォーマットされたクエリです)。

SELECT 
  title,
  description,
  (CASE 
      WHEN DATEDIFF(deadline,CURDATE()) > 0 
         THEN CONCAT('Dans ',DATEDIFF(deadline,CURDATE()), ' Jours') 
      WHEN DATEDIFF(deadline,CURDATE()) = 0 
         THEN CONCAT('Demain') 
       ELSE CONCAT('Expiré depuis ', DATEDIFF(deadline,CURDATE()) * -1, ' Jours') 
    END) as deadline,
  progress 
FROM 
  taches 
WHERE 1
于 2013-02-19T14:42:01.840 に答える