これを行うためにいくつかの方法を試しましたが、何らかの理由で 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");
}
}
}
}
Chem
SQLデータでは、 &の情報のみが入力されているElect
ため、他のすべての情報はエラーを表示するはずですがForeach
、x
値がクリアされず、最初の実行値のままであるため、リスト全体を通過するまでスキップしてしまいます。
文字列から文字列配列について読んだ後、コードを変更index
しgreater then -1
ましelse
たerror
。
コードは次のとおりです。
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 ステートメントに移動しないことです。
編集:
Textbox
I have sorted to using ComboBox
fromを使用する代わりに、別の方法で要件にアプローチすることにしました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 によって言及された最後の投稿には、 のHasRows
avalue
を挿入することによって有効なポイントがあったと思います。そう0
でない0
場合は続行し、そうでない場合はエラーメッセージを表示します。ただし、現在のアプローチにはAutoComplete
、従来のアプローチと比較してきちんとしたオプションがありますTextBox
。