TextChanged()イベントを使用して、テキストボックスにSQL Serverからオートコンプリートテキストを挿入しようとしています。 [WindowsForm, C#]
メソッドの型引数は、その使用法から推論できません。明示的に型引数を指定してみてください
私は部分クラスフォーム
TextChangedイベントがあります。私は、このメソッドCustomerName.ConvertDataTableToList()
を呼び出すときに、私はこのエラーを取得しています
private void textBoxFilterCName_TextChanged(object sender, EventArgs e)
{
DataTable dt = FillCustomerName(textBoxFilterCName.Text);
List<string> listNames = CustomerName.ConvertDataTableToList(dt);
textBoxFilterCName.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
AutoCompleteStringCollection dataName = new AutoCompleteStringCollection();
dataName.AddRange(listNames.ToArray());
textBoxFilterCName.AutoCompleteCustomSource = dataName;
textBoxFilterCName.AutoCompleteSource = AutoCompleteSource.CustomSource;
}
を。
メソッド 'CustomerName.ConvertDataTableToList(DataTable)'の型引数は、その用途から推論できません。型引数を明示的に指定してみてください。
FillCustomerName()メソッド
public DataTable FillCustomerName(string cName)
{
DataTable dtName = new DataTable();
List<string> listName = new List<string>();
try
{
dbconnection.Open();
string query = "SELECT [Name] FROM Customers WHERE Is_Active=1 AND Name like @CName + '%'";
using (SqlCommand cmd = new SqlCommand(query, dbconnection))
{
cmd.Parameters.Add("CName", SqlDbType.VarChar).Value = cName;
dtName.Load(cmd.ExecuteReader());
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Connection Error");
}
finally
{
dbconnection.Close();
}
return dtName;
}
CustomerNameのクラス:
public static class CustomerName
{
private static T CreateItemFromRow<T>(DataRow row, IList<PropertyInfo> properties) where T : new()
{
T item = new T();
foreach (var property in properties)
{
if (property.PropertyType == typeof(System.DayOfWeek))
{
DayOfWeek day = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), row[property.Name].ToString());
property.SetValue(item, day, null);
}
else
{
property.SetValue(item, row[property.Name], null);
}
}
return item;
}
public static List<T> ConvertDataTableToList<T>(this DataTable table) where T : new()
{
IList<PropertyInfo> properties = typeof(T).GetProperties().ToList();
List<T> result = new List<T>();
foreach (var row in table.Rows)
{
var item = CreateItemFromRow<T>((DataRow)row, properties);
result.Add(item);
}
return result;
}
}
クエリが実行されると、私は、アプリケーションをデバッグするときの結果が正常に生成されます。しかし、私はリストとしてdatatable結果を読み込むことができませんでした。
この変換の可能な提案は大歓迎です。
をそれは、このエラー{「文字列」を示している唯一のオプションは、一般的な方法を変更したり、このようなクラスを作成することですので、あなたは、名前の列に一致していますジェネリック型またはメソッド 'CustomerName.ConvertDataTableToList(DataTable)'} –
Muruga
@Murugaでパラメータ 'T'として使用するには、パブリックパラメータレスコンストラクタを持つ非抽象型でなければなりません。 ) 'これは、' T'型がパラメータのないコンストラクタを持つべきであることを意味します。文字列はそれを持っていません。 – user3185569
すごく!フラッシュで働いた。タイプに関する情報をありがとう。 – Muruga