ورود

View Full Version : سوال: پر کردن DropDownList از کلاس



fakhravari
جمعه 25 فروردین 1391, 21:30 عصر
با سلام
من یه کلاسی به این شکل دارم
public static DropDownList Fil_Item2(DropDownList DropList, string TableName, string TextField, string ValueField, int Filter)
{
SqlConnection con = new SqlConnection(@"Data Source=COMPUTER1\SQLEXPRESS;Initial Catalog=samplesql;Integrated Security=True");
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "select * from " + TableName + " where CategoryID= " + Filter + " ";
cmd.Parameters.Add("@CategoryID", SqlDbType.Int).Value = Filter;
con.Open();

SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();

da.Fill(dt);
con.Close();

DropList.DataSource = dt;
DropList.DataMember = TableName;
DropList.DataTextField = TextField;
DropList.DataValueField = ValueField;

DropList.DataBind();


return DropList;

}
و برای استفاده به این شکل
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
books.Fil_Item2(DropDownList2, "[B_Forums]", "ForumName", "CategoryID",2);
DropDownList2.SelectedIndex = 0;
DropDownList2_SelectedIndexChanged1(null, null);
}
}
و در صفحه html
<asp:DropDownList ID="DropDownList2" runat="server" Width="218px"
AutoPostBack="True"
onselectedindexchanged="DropDownList2_SelectedIndexChanged1" >
</asp:DropDownList>
<br />
<asp:Label ID="Label3" runat="server" Text="Label"></asp:Label>
<br />
<asp:Label ID="Label4" runat="server" Text="Label"></asp:Label>
در کد بهین
protected void DropDownList2_SelectedIndexChanged1(object sender, EventArgs e)
{
Label3.Text = DropDownList2.SelectedItem.Text;
Label4.Text = DropDownList2.SelectedValue.ToString();
}

خوب تا اینجا داده ها از کلاس میریزه توی دراپ جدید که توی صفحه است
فقط مشکل اینه که ایتم انتخاب میکنم دوباره بر میگرده اولین رکور:گیج:

dorparasti
جمعه 25 فروردین 1391, 21:45 عصر
کار عجیبی کرده اید . یکی از حدس های من اینه که dropdown رو به صورت ref ارسال کنید .

fakhravari
جمعه 25 فروردین 1391, 23:01 عصر
سلام
تست کردم جواب نداد.
والا یه مشکل عجیبی چون داده ها میرن توی DropDownList بعد وظیفه ای دیگه نداره کلاس.
AutoPostBack="True" > false کنم درست میشه.
اما دیگه دسترسی به مقادیرش نداریم که لیبل عوض کنه:ناراحت:

hamid_shrk
جمعه 25 فروردین 1391, 23:19 عصر
پیشنهاد من اینه که اینکار رو با جاوا اسکریپت انجام بدی..
جلوگیری از post back های بی مورد موضوع مهمیه که اکثرا رعایتش نمیکنن..
یکم جاوا اسکریپت رو یاد بگیری متوجه میشی ساتت خیلی کاراییش میره بالاتر.
تو این ساین من مقدار دراپ دان رو ازش با جاوا اسکریپت خوندم :
http://www.irkaspersky.com/e-store

fakhravari
جمعه 25 فروردین 1391, 23:25 عصر
books.Fil_Item2(DropDownList2, "[B_Forums]", "CategoryID", "ForumName", 2);
به این صورت اگر id بزاری مقدار text میده
برنامه درست کار میکنه

fakhravari
شنبه 26 فروردین 1391, 11:19 صبح
دوستان sample برنامه ببنید .

alonemm
شنبه 26 فروردین 1391, 12:09 عصر
باسلام:

مشکل رفع شد و تست کردم کارهم کرد.

fakhravari
شنبه 26 فروردین 1391, 12:24 عصر
نه ببنید اگر فایل توی کلاس ببینید.
قسمت Fil_Item مشکلی نداره.
مشکل روی Fil_Item2 که یه where داره.
خوب تعجب من اینه که کار کلاس فقط پرکردن DropDownList و بعد از پر شدن کاری باش نداریم.
وقتی postbak فعال باشه وقتی item انتخاب میشه باز برمیگرده item اول.
اما وقتی false باشه درسته.

fakhravari
شنبه 26 فروردین 1391, 13:02 عصر
با سلام
DropDownList2_SelectedIndexChanged
در قسمت 2 که داریم با where جستجو میکنیم چون SelectedIndexChanged مساوی هم هستند یکی انتخاب میکنه.
الان برای رفع ان دوستان چی پیشنهاد میککنند
ولی فکر نکنم چون SelectedIndex متفاط هستند :متفکر::ناراحت:

alonemm
شنبه 26 فروردین 1391, 13:09 عصر
کد رو به شکل زیر تغییر بدید تا مشکل شما حل بشه:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication6
{
public partial class WebForm2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
books.Fil_Item(DropDownList1, "[B_Categories]", "CategoryName", "CategoryID");
DropDownList1.SelectedIndex = 0;
DropDownList1_SelectedIndexChanged(null, null);

DropDownList1.AutoPostBack = true;
DropDownList2.AutoPostBack = true;
}

}

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
Label1.Text = DropDownList1.SelectedItem.Text;
Label2.Text = DropDownList1.SelectedValue.ToString();

books.Fil_Item2(DropDownList2, int.Parse(DropDownList1.SelectedValue.ToString()), "[B_Forums]", "CategoryID", "ForumName");
DropDownList2.SelectedIndex = 0;
DropDownList2_SelectedIndexChanged(null, null);
}



protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
{
Label3.Text = DropDownList2.SelectedItem.Text;
Label4.Text = DropDownList2.SelectedValue.ToString();
}

d_derakhshani
شنبه 26 فروردین 1391, 13:14 عصر
متوجه نشدم مشکل کجاست؟

fakhravari
شنبه 26 فروردین 1391, 13:20 عصر
متوجه نشدم مشکل کجاست؟
یه تستی میکردی برنامه رو اول

مشکل در انتخاب item داپ که همه value در شرط مساوی هم هستند.
ولی SelectedIndexChanged مقدار index بر می گردونه چرا همش روی رکورد 1 میمونه

مثال
<asp:DropDownList ID="DropDownList3" runat="server" AutoPostBack="True"
onselectedindexchanged="DropDownList3_SelectedIndexChanged"
Width="124px">
<asp:ListItem Value="1">111</asp:ListItem>
<asp:ListItem Value="1">11</asp:ListItem>
<asp:ListItem Value="1">1111</asp:ListItem>
</asp:DropDownList>
همش روی item 1

d_derakhshani
شنبه 26 فروردین 1391, 13:38 عصر
از کجا میدونی من تست نکردم؟برنامه شما رو دانلود کردم و اجرا کردم اما شما بدش پست گذاشتید دیگه دلیل ندیدم تست رو ادامه بدم دوست گرامی. خوب پس مشکل مشخص شد دیگه

fakhravari
شنبه 26 فروردین 1391, 13:46 عصر
ممنون.
نه مشکل ادامه داره.
همون پست 12 برسی کنید
نمیشه Item انتخاب کرد

d_derakhshani
شنبه 26 فروردین 1391, 13:56 عصر
خوب این مشخصه. تا زمانی که فیلد value شما CategoryID هست مشکل پا برجاست. بجاش ForumID رو بزارید.
بعد به روش پست #10 پیروی کنید(فقط جای CategoryID با ForumID عوض شه)اگه با این تغییر مشکلی به وجود میاد از لحاظ منطقی پست بزارید تا روشش رو بگیم

fakhravari
شنبه 26 فروردین 1391, 13:59 عصر
خوب این مشخصه. تا زمانی که فیلد value شما CategoryID هست مشکل پا برجاست. بجاش ForumID رو بزارید.
بعد به روش پست #10 پیروی کنید(فقط جای CategoryID با ForumID عوض شه)اگه با این تغییر مشکلی به وجود میاد از لحاظ منطقی پست بزارید تا روشش رو بگیم
پست 10 هم نمیشه
مشکل من اینه که
<asp:ListItem Value="1">111</asp:ListItem>
<asp:ListItem Value="1">11</asp:ListItem>
<asp:ListItem Value="1">1111</asp:ListItem>
الان نمیشه ایتمی انتخاب کرد چون Value مساوی چرا؟:گیج:

d_derakhshani
شنبه 26 فروردین 1391, 14:09 عصر
جواب شما داده شد value شما چرا همش 1 هست چون فیلد CategoryID استفاده شده. عوضش کن بزار ForumID

fakhravari
شنبه 26 فروردین 1391, 14:14 عصر
دوستان اصلا کد درست بود
من جای فیلد ها را وارو مینوشتم
books.Fil_Item2(DropDownList2, 3, "[B_Forums]", "ForumID", "ForumName");
ForumID = CategoryID

d_derakhshani
شنبه 26 فروردین 1391, 14:16 عصر
من که تو دو پست قبلی بهتون گفتم. معلومه که حواستون نیست

alonemm
شنبه 26 فروردین 1391, 14:23 عصر
بله چون در DropDownList2 تمامی Value ها برابر هم بود به اولین آیتم با این مقدار رجوع میشد.

fakhravari
شنبه 26 فروردین 1391, 15:06 عصر
خوب دوستان مگه بر حسب Index انتخاب نمیشه
چرا باید اینجوری باشه
برای مثال Index 0 باشه نام = اکسس فروم 1
1 index = اراکل فروم 1
منظورم اینه بیاد Index ببینه بعد بره مقادیرشو بخونه