0

これを行うためにいくつかの方法を試しましたが、何らかの理由で If ステートメントを正しく実装できません。

SelectedItem.Textから取得Drop Down Listし、データベースでその行を検索して保存し、DataSetに表示しようとしていますGridView。ただし、データベースには単語を含む 19 の固定列があるため、ユーザーが if ステートメントで 1 つのドロップダウン リストを選択すると、データがデータベースに見つからない場合DataSetに表示されるはずですが、Else で「データ」というエラー メッセージが表示されます。GridView見つかりません"

私は 19 固定columnsを物理的に入力Arrayして、以下を使用しようとしました:

protected void SearchProductButton_Click1(object sender, EventArgs e)
    {
        string Producttext = SearchProductDropDownList.SelectedItem.Text; 
        string[] Producttext2 = 
        {
            "Chem",
            "Drill",
            "Elect",
            "Products",
            "Environmental",
            "Instrument",
            "Lab",
            "Lift",
            "Tools",
            "Repair",
            "Pipes",
            "Portable",
            "Power",
            "Steel",
            "Testing",
            "Tooling",
            "Tubes",
            "Valves",
            "Systems",
            "Consumables",
        };
        using (var con = new SqlConnection("Data Source=localhost;Initial Catalog=ROG;Integrated Security=True"))
        using (var daProduct = new SqlDataAdapter("SELECT [Serial_No], [Material_No], [Product_Line], [Product_Description], [Size], [UOM], [Supplier_Price], [Price_Date], [Selling_Price] FROM [ProductDB] WHERE [Product_Line] = @Product_Line", con))
        {
            foreach (string x in Producttext2)
            {
                if (x.Contains(Producttext))                              
                {
                    daProduct.SelectCommand.Parameters.Add("@Product_Line", SqlDbType.VarChar, 50).Value = Producttext;
                    DataSet dsProduct = new DataSet();
                    daProduct.Fill(dsProduct, "Product_Line");
                    SearchProductGridView.DataSource = dsProduct;
                    SearchProductGridView.DataBind();                        
                }
                else
                {
                    MessageBox.Show("Data Not Found");
                }
            }

        }
    }

ChemSQLデータでは、 &の情報のみが入力されているElectため、他のすべての情報はエラーを表示するはずですがForeachx値がクリアされず、最初の実行値のままであるため、リスト全体を通過するまでスキップしてしまいます。

文字列から文字列配列について読んだ後、コードを変更indexgreater then -1ましelseerror

コードは次のとおりです。

 protected void SearchProductButton_Click1(object sender, EventArgs e)
    {
        string Producttext = SearchProductDropDownList.SelectedItem.Text; 
        string[] Productarray = new string[20]; 
        Productarray[0] = "Chem";
        Productarray[1] = "Drill";
        Productarray[2] = "Elect";
        Productarray[3] = "Products";
        Productarray[4] = "Environmental";
        Productarray[5] = "Instrument";
        Productarray[6] = "Lab";
        Productarray[7] = "Lift";
        Productarray[8] = "Tools";
        Productarray[9] = "Repair";
        Productarray[10] = "Pipes";
        Productarray[11] = "Portable";
        Productarray[12] = "Power";
        Productarray[13] = "Steel";
        Productarray[14] = "Testing";
        Productarray[15] = "Tooling";
        Productarray[16] = "Tubes";
        Productarray[17] = "Valves";
        Productarray[18] = "Systems";
        Productarray[19] = "Consumables";

        using (var con = new SqlConnection("Data Source=localhost;Initial Catalog=ROG;Integrated Security=True"))
        using (var daProduct = new SqlDataAdapter("SELECT [Serial_No], [Material_No], [Product_Line], [Product_Description], [Size], [UOM], [Supplier_Price], [Price_Date], [Selling_Price] FROM [ProductDB] WHERE [Product_Line] = @Product_Line", con))
        {
            //foreach (string x in Producttext2)
            //{
            int index1 = Array.IndexOf(Productarray, Producttext);
                if (index1 !=-1)                             
                {
                    daProduct.SelectCommand.Parameters.Add("@Product_Line", SqlDbType.VarChar, 50).Value = Producttext;
                    DataSet dsProduct = new DataSet();
                    daProduct.Fill(dsProduct, "Product_Line");
                    SearchProductGridView.DataSource = dsProduct;
                    SearchProductGridView.DataBind();                        

                }
                else
                {
                    MessageBox.Show("Data Not Found");
                }
            //}

        }
    }

2 番目のアプローチの問題は、何を試しても、else ステートメントに移動しないことです。

編集:

TextboxI have sorted to using ComboBoxfromを使用する代わりに、別の方法で要件にアプローチすることにしましたAJAX ToolKit

HTMLは次のとおりです。

<ajaxToolkit:ComboBox ID="SearchMaterialComboBox" runat="server" 
        AutoCompleteMode="Append" AutoPostBack="false" CaseSensitive="false" 
        DataSourceID="ProductDBMaterialSqlDataSource" DataTextField="Material_No" 
        DataValueField="Material_No" DropDownStyle="DropDownList" Height="20px" 
        MaxLength="10" RenderMode="Block" style="display: inline-block;" Width="285px">
    </ajaxToolkit:ComboBox>**strong text**

コード:

protected void SearchMaterialButton_Click(object sender, EventArgs e)
    {
        //long Materialtextbox = Convert.ToInt64(SearchMaterialComboBox.Text);
        string Materialstr = SearchMaterialComboBox.Text;
        using (var con = new SqlConnection("Data Source=localhost;Initial Catalog=ROG;Integrated Security=True"))
        using (var daMaterial = new SqlDataAdapter("SELECT [Serial_No], [Material_No], [Product_Line], [Product_Description], [Size], [UOM], [Supplier_Price], [Price_Date], [Selling_Price] FROM [ProductDB] WHERE [Material_No] = @Material_No", con))
        {
            if (Materialstr != "")
            {
                daMaterial.SelectCommand.Parameters.Add("@Material_No", SqlDbType.BigInt).Value = Materialstr;
                DataSet dsMaterial = new DataSet();
                daMaterial.Fill(dsMaterial, "Material_No");
                SearchProductGridView.DataSource = dsMaterial;
                SearchProductGridView.DataBind();
            }
            else
            {

            }

        }
    }       

@Patashu によって言及された最後の投稿には、 のHasRowsavalueを挿入することによって有効なポイントがあったと思います。そう0でない0場合は続行し、そうでない場合はエラーメッセージを表示します。ただし、現在のアプローチにはAutoComplete、従来のアプローチと比較してきちんとしたオプションがありますTextBox

4

1 に答える 1

0
using System.Linq;

string match = Producttext2.FirstOrDefault((x) => x.Contains(Producttext));
if (match != null)
{
 // do stuff
}
else
{
 // error message
}

http://msdn.microsoft.com/en-us/library/bb549039.aspxのメソッド

于 2013-01-31T01:14:44.307 に答える