0

データベースに正式に追加される前に、ユーザーが提出したコンテンツをオフィスの c# winform にロードして処理しました。ユーザーは「リファラー」を 2 つのテキスト フィールド (名と姓) として送信できます。オフィスでは、コンボボックスに既存のすべてのリファラーが読み込まれ、名前の最初の数文字が必要な領域までコンボボックスを進めたいと考えています。名前の最初の 2 文字を取り、それを使用してコンボボックスを初期化して、このようなことをしたいと考えています。

if (txtrefFirstName.TextLength > 2)
{
   string firstStart = "" + txtrefFirstName.Text[0] + txtrefFirstName.Text[1];
   firstStart = firstStart.ToUpper();
   ddlReferring.SelectedText.StartsWith(firstStart);
}
else
   ddlReferring.Text = "";

これを機能させるためのアイデアや提案はありますか?

ありがとう

デビッド K.

4

2 に答える 2

2

このようなものを書くことができます...

foreach (string item in ddlReferring.Items)
{
    if (item.StartsWith(firstStart))
    {
        ddlReferring.SelectedText = item;
        break;
    }
}
于 2012-05-18T17:41:25.210 に答える
1

ddl のデータソースが String オブジェクトのリストであると仮定すると、データソース自体を比較できるはずです。私はこのようなことに Linq を使用する傾向がありますが、厳密に必要というわけではなく、短いだけです。

if (txtrefFirstName.TextLength > 2)
{
   string firstStart = txtrefFirstName.Text.Substring(0,2).ToUpper();
   string Selection = ddlReferring.DataSource.Where(a=>a.StartsWith(firstStart)).FirstOrDefault();
   ddlReferring.SelectedText = Selection ?? "";
}
else
   ddlReferring.Text = "";

選択行はアイテム コレクションから直接取得することもできます

string Selection = ddlReferring.Items.OfType<string>().Where(a=>a.StartsWith(firstStart)).FirstOrDefault();

または、本当にLinqを使いたくない場合...

string Selection = "";
foreach (object item in ddlReferring.Items)
    if (item.ToString().StartsWith(firstStart))
    {
        Selection = item.ToString();
        break;
    }

ddl のデータが文字列のリストではない場合でも、同様のメソッドを使用できます。項目を適切にキャストし、正しい値を比較するようにしてください。

于 2012-05-18T17:46:33.813 に答える