# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > WPF >  نمایش رکورد ها در datagridview

## mahdivita

سلام
کد زیر توی wpf چجوری میشه ؟؟ من توی C#‎ برای نمایش رکوردها در datagridview از کد زیر استفاده میکردم
if (objdr.HasRows)
                {
                    dataGridView1.Columns.Add("ChefCode", "کد آشپز");
                    dataGridView1.Columns.Add("Name", "نام");
                    dataGridView1.Columns.Add("Fname", "نام خانوادگی");
                    dataGridView1.Columns.Add("FatherName", "نام پدر");
                    dataGridView1.Columns.Add("Shsh", "شماره شناسنامه");
                    dataGridView1.Columns.Add("Tt", "تاریخ تولد");
                    dataGridView1.Columns.Add("WorkExperiense", "سابقه کاری");
                    dataGridView1.Columns.Add("Salary", "حقوق");
                    dataGridView1.Columns.Add("Tel", "تلفن ثابت");
                    dataGridView1.Columns.Add("TelMob", "تلفن همراه");
                    dataGridView1.Columns.Add("Address", "آدرس");
                    int i = 0;
                    while (objdr.Read())
                    {
                        dataGridView1.Rows.Add();
                        dataGridView1.Rows[i].Cells[0].Value = objdr[0];
                        dataGridView1.Rows[i].Cells[1].Value = objdr[1];
                        dataGridView1.Rows[i].Cells[2].Value = objdr[2];
                        dataGridView1.Rows[i].Cells[3].Value = objdr[3];
                        dataGridView1.Rows[i].Cells[4].Value = objdr[4];
                        dataGridView1.Rows[i].Cells[5].Value = objdr[5];
                        dataGridView1.Rows[i].Cells[6].Value = objdr[6];
                        dataGridView1.Rows[i].Cells[7].Value = objdr[7];
                        dataGridView1.Rows[i].Cells[8].Value = objdr[8];
                        dataGridView1.Rows[i].Cells[9].Value = objdr[9];
                        dataGridView1.Rows[i].Cells[10].Value = objdr[10];
                        i++;
                    }

                }

----------


## MRasoul

سلام
میخوای یه دیتاگرید رو از جدول دیتا بیس پر کنی؟
اینو استفاده کن

             CmdString = "SELECT * from mytable";
            SqlCommand cmd = new SqlCommand(CmdString, obj_con);
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable("mytable");
            sda.Fill(dt);
            datagrid_name.ItemsSource = dt.DefaultView;
              datagrid_name.Columns[0].Header = "کد آشپز";
              datagrid_name.Columns[1].Header = "نام";
              datagrid_name.Columns[2].Header = "نام خانوادگی";
              datagrid_name.Columns[3].Header = "نام پدر";
              datagrid_name.Columns[4].Header = "شناسنامه";
              datagrid_name.Columns[5].Header = "تولد";
              datagrid_name.Columns[6].Header = "سابقه";

obj_con : شی ای از SqlConnectionString که رشته اتصال رو داره

----------


## mahdivita

سلام
ارور زیر رو میده : 
An exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll but was not handled in user code

Additional information: Index was out of range. Must be non-negative and less than the size of the collection.

----------


## MRasoul

جدولتون که اطلاعات رو ازش میخونین رو میتونین یه عکس ازش بذارین

----------


## mahdivita

داخل جدول یک رکورد وجود داره

----------


## MRasoul

ببین من توی این کد 7تا فیلد در نظر گرفتم
حالا تو جدولت چندتا فیلد داره؟ 
وقتی خطا میده از خطایی که روی کدهاس عکس بگیر

----------


## mahdivita

من کدی که دادین رو به تعداد فیلدهام تغییرش دادم
اروری که میده اینه :

----------


## MRasoul

شما یه کاری بکن
اول اینکه توی کدهای دیتاگریدت چیزی ننوشتی؟
دوم کدها رو یبار اینجور استفاده کن ببین جواب میده
CmdString = "SELECT * from mytable";
SqlCommand cmd = new SqlCommand(CmdString, obj_con);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataTable dt = new DataTable("mytable");
sda.Fill(dt);
datagrid_name.ItemsSource = dt.DefaultView;


ینی فعلا اسم و فیل مشخص نکن،اینو ببین ج میده؟

----------


## mahdivita

اونجوری جواب میده اما من میخوام هدر فیلدها رو فارسی بنویسم 
الان هدر فیلدها همون اسمی هست که توی دیتابیس برای فیلد تعریف کردم

----------


## MRasoul

خب ساده است
توی کدهای طراحی دیتا گریدتون هدر ها رو اضافه کن
به تعداد ستونهایی که داری، column ایجاد کن و بایند کن بهش خیلی سادس
اگر مشکلی بود بگو کداش رو برات بذارم



ببخشید شما توی WPF گزارش گیری نکردین؟من توی بحث چاپش مشکل دارم کسی هم اینجا جوابم رو نمیده

----------


## mahdivita

نه والا گزاریش گیری نکردم 
من خودم چند روزه که با wpf آشنا شدم برای پروژه دانشگاه :دی
شرمنده کدهاش همون کدهای قبلیه؟؟

----------


## MRasoul

ببین کد زیر رو که توی کدهات میذاری
CmdString = "SELECT * from mytable";
SqlCommand cmd = new SqlCommand(CmdString, obj_con);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataTable dt = new DataTable("mytable");
sda.Fill(dt);
dgv.ItemsSource = dt.DefaultView;



بعد توی طراحی دیتاگریدت اینجوری بنویس
<DataGrid x:Name="dgv" Margin="10,63,10,20" AutoGenerateColumns="False" >
                            <DataGrid.Columns>
                                <DataGridTextColumn Header="نام هدر اول" Binding="{Binding column1}"/>
                                <DataGridTextColumn Header="نام هدر دوم" Binding="{Binding column2}"/>
                                <DataGridTextColumn Header="نام هدر سوم" Binding="{Binding column3}"/>
                             </DataGrid.Columns>
                        </DataGrid>
من فرض کردم 3 تا ستون داری به اسمهای column1,column2,column3 حالا خودت متناسب با ستونهات نامگذری کن و تعداد اضافه کن
اونا رو هم که به فارسی نوشتم که نام دلخواهه که برای هدرهات میخوای بذاری
اگر باز جواب نگرفتی،برنامتو بذار تا برات اوکیش کنم و بدمت
اگرم جواب گرفتی بگو که مطمئن باشم جواب داده
شبخیر

----------


## mahdivita

الان درست شد ولی یه مشکلی که هست اینه که اول میاد اون هدر فارسی ها رو   نشون میده با محتواش بعد میاد هدر های خارجی رو نشون میده با محتواش

----------


## MRasoul

> الان درست شد ولی یه مشکلی که هست اینه که اول میاد اون هدر فارسی ها رو   نشون میده با محتواش بعد میاد هدر های خارجی رو نشون میده با محتواش


سلام
مطمئنا این کد رو برداشتین که این مشکل پیش اومده، کد رو به دیتاگریدت اضافه کن و لذت ببر
AutoGenerateColumns="False"

----------


## MRasoul

کد AutoGenerateColumns="False" رو اضافه کردی؟ درست شد؟

----------


## rfewsff

سلام
من چجوری ابزار
data gridview 
 رو تو 
wpf
بیارم
هر کاری می کنم نمیشه
فقط
datagrid
هست
خواهش می کنم کمکم کنید
ممنون
با ویندوز فرم میاد ولی با 
wpf
نمیاد

----------


## MRasoul

> سلام
> من چجوری ابزار
> data gridview 
>  رو تو 
> wpf
> بیارم
> هر کاری می کنم نمیشه
> فقط
> datagrid
> ...


سلام
توی کدهای تعریف ویندوز WPF ات کد زیر رو اضافه کن

    xmlns:WinForms="clr-namespace:System.Windows.Forms;assembly=System.Win  dows.Forms"
حالا توی گریدت کد زیر رو اضافه کن
<WindowsFormsHost Grid.Row="0">
            <WinForms:DataGridView x:Name="myDG">
            </WinForms:DataGridView>
        </WindowsFormsHost>
باید اینجور چیزی داشته باشی
<Window x:Class="myproject.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:WinForms="clr-namespace:System.Windows.Forms;assembly=System.Win  dows.Forms"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <WindowsFormsHost Grid.Row="0">
            <WinForms:DataGridView x:Name="myDG">
            </WinForms:DataGridView>
        </WindowsFormsHost>

    </Grid>
</Window>


الان شما توی کد نویسیت میتونی دیتاگریدویو ساخته شده رو فراخوانی و باهاش کار کنی

----------


## rfewsff

سلام 
واقعا از لطفتون ممنون
خیلی به دردم خورد :تشویق:

----------


## rfewsff

سلام
چجوری میشه اطلاعات جدول دیتا بیس رو وارد دیتا گرید کرد(دیتا گرید نه دیتا گرید ویوو)
از طریق اتصال linq to SQL  می خوام
ممنون

----------


## rfewsff

سلام
برای گزارش گیری اگه مشکل دارید من نرم سراغش
اخه من قبلا با ویندوز فرم کار میکردم
فکر نمی کردم گزارش گیریش هم مشکل داشته باشه
برای گزارش گیری استیمول ریپورت وصل نمیشه؟
نمیتونید از استیمول ریپورت استفاده کنید؟
تو ویندوز فرم من از استیمول ریپورت استفاده می کردم

----------


## MRasoul

> سلام
> برای گزارش گیری اگه مشکل دارید من نرم سراغش
> اخه من قبلا با ویندوز فرم کار میکردم
> فکر نمی کردم گزارش گیریش هم مشکل داشته باشه
> برای گزارش گیری استیمول ریپورت وصل نمیشه؟
> نمیتونید از استیمول ریپورت استفاده کنید؟
> تو ویندوز فرم من از استیمول ریپورت استفاده می کردم


سلام
به همین روش که دیتاگریدویو رو آوردیم میتونیم ReportViewer هم بیاریم اما توی بعضی سیستم ها من به مشکل برخوردم و از اونجایی که فعلا فرصت حل این مشکل رو ندارم از استیمول استفاده کردم

----------


## MRasoul

> سلام
> چجوری میشه اطلاعات جدول دیتا بیس رو وارد دیتا گرید کرد(دیتا گرید نه دیتا گرید ویوو)
> از طریق اتصال linq to SQL  می خوام
> ممنون


با LINO استفاده نکردم اما با خود دستورات SQL استفاده کردم اگر به کارت میاد برات بگم

----------


## rfewsff

من بانکم اماده هست و همه ویو ها و استور پروسجر ها رو طراحی کردم
شنیدم linq بهتر است از دیتا ست برای همین میخوام با linq  وصل بشم
شما چیزی در این مورد نشنیدی(در مورد مزایای اتصالات linq نسبت به دیتا ست)

----------


## MRasoul

> من بانکم اماده هست و همه ویو ها و استور پروسجر ها رو طراحی کردم
> شنیدم linq بهتر است از دیتا ست برای همین میخوام با linq  وصل بشم
> شما چیزی در این مورد نشنیدی(در مورد مزایای اتصالات linq نسبت به دیتا ست)


نه متاسفانه اصلا فرصت نکردم باهاش کار کنم

----------


## rfewsff

سلام
فراخوانی استور پروسیجر از داخل دیتا ست ایجاد شده چجوری هست

----------


## MRasoul

> سلام
> فراخوانی استور پروسیجر از داخل دیتا ست ایجاد شده چجوری هست


مشابه این میتونی عمل کنی
SqlConnection sqlConnection1 = new SqlConnection("Your Connection String");
SqlCommand cmd = new SqlCommand();
SqlDataReader reader;

cmd.CommandText = "StoredProcedureName";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = sqlConnection1;

sqlConnection1.Open();

reader = cmd.ExecuteReader();

sqlConnection1.Close();
البته این استور پروسیجر دیتابیس رو که داخل خود دیتابیس نوشته شده رو صدا میزنه

----------


## MRasoul

> سلام
> فراخوانی استور پروسیجر از داخل دیتا ست ایجاد شده چجوری هست


فکر کنم از این روش هم میتونین استفاده کنین
SqlConnection con = new SqlConnection("Your Connection String")

    SqlDataAdapter da = new SqlDataAdapter("StoredProcedureName", con); // Using a Store Procedure.


    da.SelectCommand.CommandType = CommandType.StoredProcedure; // Comment if using hard coded query.

    DataSet ds = new DataSet(); // Definition: Memory representation of the database.   


    da.Fill(ds); // Fill the dataset with the query data

 

    GridView1.DataSource = ds; // Set the dataso... meh, you get it.

    GridView1.DataBind();

----------


## mahdivita

سلام
من برای نمایش اطلاعات از کد زیر استفاده کردم تو رویداد form load بعدش مشکل اینجاس که کار نمیکنه اما وقتی یه باتن میزارم روی صفحه و کدهای رو داخل اون باتن مینویسم کار میکنه
مشکل چیه؟ من میخوام بدون اینکه روی باتنی کلیک کنم با load شدن فرم اطلاعات نشون داده بشه
SqlConnection objcon = new SqlConnection();
            objcon.ConnectionString = "data source=localhost;initial catalog=real-estate;integrated security=true";
            SqlCommand objcom = new SqlCommand();
            objcom.Connection = objcon;
            objcom.CommandText = "select * from  tbl_home";
            objcon.Open();
            SqlDataAdapter objda = new SqlDataAdapter(objcom);
            DataTable dt = new DataTable("tbl_home");
            objda.Fill(dt);
            objcon.Close();
            dgv.ItemsSource = dt.DefaultView;
            this.dgv.Columns[0].Header = "کد ثبت";
            this.dgv.Columns[1].Header = "نام مالک";
            this.dgv.Columns[2].Header = "نام خانوادگی مالک";
            this.dgv.Columns[3].Header = "تلفن مالک";
            this.dgv.Columns[4].Header = "کد منطقه";
            this.dgv.Columns[5].Header = "نام خیابان";
            this.dgv.Columns[6].Header = "کوچه";
            this.dgv.Columns[7].Header = "پلاک";
            this.dgv.Columns[8].Header = "طبقه";
            this.dgv.Columns[9].Header = "نوع ملک";
            this.dgv.Columns[10].Header = "متراژ";
            this.dgv.Columns[11].Header = "قیمت";
            this.dgv.Columns[12].Header = "تعداد خواب";
            this.dgv.Columns[13].Header = "امکانات";

----------


## MRasoul

خب این ها رو بذار توی یه تابع و اون تابع رو توی لود فراخوانی کنه
یه کد هم مث زیر آخر کدهای این تابع بذار ببین اصلا عمل کرده یا نه
MessageBox.Show(dt.Rows.Count.ToString());

----------


## mahdivita

چجوری باید تابع ایجاد کنم در wpf و چجوری باید فراخوانیش کنم؟

----------


## MRasoul

تو همون قسمت کد نویسی سی شارپت بنویس 
مثلا بنویس
public void func_name()
{
کدهای تابع
}
بعد توی لود بنویسی
func_name();

----------


## mahdivita

ای خداااااااااااااا
باز هم ارور میده
نمیدونم چرا تو یه باتن میزارم ارور نمیده اما اینجوری ارور میده

----------


## MRasoul

ازخطاش عکس بگیر
آخه به چی خطا میده
کاش برنامتو میذاشتی تا ببینم مشکلش چیه

----------


## mahdivita

سلام
من کد رو گذاشتم تو رویداد loaded دیتاگریدویو اوکی شد
حالا میخوام کاری کنم که نتونه داده ها رو ویرایش یا جذف و اضافه کنه
چی باید بکنم؟

----------


## MRasoul

> سلام
> من کد رو گذاشتم تو رویداد loaded دیتاگریدویو اوکی شد
> حالا میخوام کاری کنم که نتونه داده ها رو ویرایش یا جذف و اضافه کنه
> چی باید بکنم؟


کد زیر رو توی تعریف دیتاگریدت بزن
IsReadOnly="True"
یا توی قسمت Properties مربوط به دیتا گرید تیک IsReadOnly رو بزن

----------


## mahdivita

چجوری باید خروجی نهایی رو بگیرم؟؟
و همچنین چجوری میتونم برای کل برنامه آیکون بزارم؟

----------


## MRasoul

> چجوری باید خروجی نهایی رو بگیرم؟؟
> و همچنین چجوری میتونم برای کل برنامه آیکون بزارم؟


فایل اجرایی و dll های مربوط توی پوشه Debug هستند
برای آیکن هم به تب Project در بالای برنامه ویژوال برو بعد گزینه آخر که Properties رو داره رو انتخاب کن تا یه صفحه باز بشه، تو اون صفحه به تب Applivcation برو و توی قسمت آیکن برای برنامت آیکنی انتخاب کن و یه اجرا بگیر تا آیکن روی برنامت بشینه
دوست عزیز، کاش بعد هر سوالت میگفتی که جواب گرفتی یا جراب نگرفتی بعد سوال بعدی رو مطرح میکردی! اینجوری هم اونی که جواب میده انگیزه پیدا میکنه هم اگر جاب نگرفتی باز به مشکل ایجاد شده فکر میشه
با تشکر

----------


## mahdivita

سلام
ممنون همه رو جواب گرفتم

----------


## mahdivita

سلامی مجدد
مشکل کد زیر چیه؟؟ ارور روی OK هست
if (sfd.ShowDialog() == DialogResult.Ok)
            {
                str_filename = sfd.FileName;
                backup(str_filename);


            }

----------


## MRasoul

> سلامی مجدد
> مشکل کد زیر چیه؟؟ ارور روی OK هست
> if (sfd.ShowDialog() == DialogResult.Ok)
>             {
>                 str_filename = sfd.FileName;
>                 backup(str_filename);
> 
> 
>             }


sfd چیه و چ دکمه هایی داره؟شایدyes\no داره نه ok

----------


## mahdivita

Microsoft.Win32.OpenFileDialog sfd = new Microsoft.Win32.OpenFileDialog();
            string str_filename = string.Empty;

            sfd.Filter = @"backup files(*.bak)|*.bak|all files(*.*)|*.*";
            sfd.FilterIndex = 1;

            sfd.Title = "***open backup files***";

            if (sfd.ShowDialog() == DialogResult.OK)
            {
                str_filename = sfd.FileName;
                restore(str_filename);


            }
کل کد اینه

----------


## MRasoul

> Microsoft.Win32.OpenFileDialog sfd = new Microsoft.Win32.OpenFileDialog();
>             string str_filename = string.Empty;
> 
>             sfd.Filter = @"backup files(*.bak)|*.bak|all files(*.*)|*.*";
>             sfd.FilterIndex = 1;
> 
>             sfd.Title = "***open backup files***";
> 
>             if (sfd.ShowDialog() == DialogResult.OK)
> ...


عزیزم همه چیش درسته فقط به جای کد
            if (sfd.ShowDialog() == DialogResult.OK)
بنویس
            if (sfd.ShowDialog() == true)
دیگه همش حله

----------


## mahdivita

میخوام اجرا کنم ارور زیر رو میده
Error    1    'backup': member names cannot be the same as their enclosing type

----------


## MRasoul

> میخوام اجرا کنم ارور زیر رو میده
> Error    1    'backup': member names cannot be the same as their enclosing type


این خطا که مال این کدها نیس،احتمالا به کدهای تابع restore داره گیر میده

----------


## mahdivita

کل کدهام ایناس  : 

private void Button_Click_14(object sender, RoutedEventArgs e)
        {
            Microsoft.Win32.SaveFileDialog sfd = new Microsoft.Win32.SaveFileDialog();
            string str_filename = string.Empty;
            sfd.FileName = "backup_database_" + DateTime.Now.ToShortDateString().Replace("/", "_");
            sfd.Filter = @"backup files(*.bak)|*.bak|all files(*.*)|*.*";
            sfd.FilterIndex = 1;
            sfd.OverwritePrompt = true;
            sfd.Title = "***save backup files***";
            if (sfd.ShowDialog() == true)
            {
                str_filename = sfd.FileName;
                backup(str_filename);


            }


        }
        private void backup(string str_filename)
        {

            try
            {
                this.Cursor = Cursors.Wait;
                
                    string command = @"BACKUP DATABASE real-etate to DISK='" + str_filename + "'";

                    SqlConnection con = new SqlConnection();
                    SqlCommand cmd = new SqlCommand();
                    con.ConnectionString = "data source=.;initial catalog=real-etate;integrated security=true";
                    if (con.State != ConnectionState.Open)
                        con.Open();

                    cmd.Connection = con;
                    cmd.CommandText = command;
                    cmd.ExecuteNonQuery();
                
             

                this.Cursor = Cursors.Arrow;
                MessageBox.Show("عملیات پشتیبان گیری موفقیت آمیز بود");





            }
            catch(Exception ex)
            {
                MessageBox.Show("عملیات پشتیبان گیری موفقیت آمیز نبود |" + ex.Message);
            }






        }
        private void restore(string str_filename)
        {
            try
            {
                this.Cursor = Cursors.Wait;
                string command = @"ALTER DATABASE real-etate SET SINGLE_USER with ROLLBACK IMMEDIATE "
               + " USE MASTER " +
               "  RESTORE DATABASE real-etate from DISK='" + str_filename + "' with REPLACE";

                    SqlConnection con = new SqlConnection();
                    SqlCommand cmd = new SqlCommand();
                    con.ConnectionString = "data source=.;initial catalog=real-etate;integrated security=true";
                    if (con.State != ConnectionState.Open)
                        con.Open();

                    cmd.Connection = con;
                    cmd.CommandText = command;
                    cmd.ExecuteNonQuery();
              

                this.Cursor = Cursors.Arrow;
                MessageBox.Show("عملیات بازیابی اطلاعات موفقیت آمیز بود");





            }
            catch (Exception ex)
            {
                MessageBox.Show("عملیات بازیابی اطلاعات موفقیت آمیز نبود|" + ex.Message);
            }







        }
private void Button_Click_4(object sender, RoutedEventArgs e)
        {
            Microsoft.Win32.OpenFileDialog sfd = new Microsoft.Win32.OpenFileDialog();
            string str_filename = string.Empty;

            sfd.Filter = @"backup files(*.bak)|*.bak|all files(*.*)|*.*";
            sfd.FilterIndex = 1;

            sfd.Title = "***open backup files***";

            if (sfd.ShowDialog() == true)
            {
                str_filename = sfd.FileName;
                restore(str_filename);


            }
        }

----------


## MRasoul

این بک آپ و رستور توی قسمت سی شارپ هست،سرچ بزن استفاده کن

----------


## mahdivita

خب آخه تو wpf فرق میکنه !!! :(

----------


## MRasoul

نه  این بحث فرق نمیکنه،شما با کدهای سی شارپ میخوای بک آپ و رستور کنی و الته رستور یکم کار صحیحی نیس از داخل برنامه و به دست همه کس!!

----------


## mahdivita

الان ارور زیر رو میده

----------


## MRasoul

> الان ارور زیر رو میده


یعنی فعلا توی بک آپ گیری خطا میده؟

----------


## mahdivita

اره دقیقا همینطوره !!!!!

----------


## MRasoul

متاسفانه من اس کیو ال ندارم که روی دیتابیسی براتون تست کنم و جواب مطمئن بهتون بدم

----------


## SabaSabouhi

سلام
به نظر می‌رسد که متد backup شما در کلاسی به همین نام واقع شده باشد. 
شما نمی‌توانید در یک کلاس متد به همان نام داشته باشید.
در ضمن، در ConnectionString بجای real-state به master وصل شوید.

صبا صبوحی

----------


## rfewsff

سلام 
مشکل کد زیر چیه؟ 
ارور می ده

            char qq  ;
            qq = "A";


            switch (qq)
            {
                case 'A':
                    label1.Text =  "persianweek";
                    break;
                case 'B':
                    label1.Text = "persidddddddddanweek";
                    break;

            }

ارورش اینه
Cannot implicitly convert type 'string' to 'char'
چیکار کنم

----------


## rfewsff

ارورش اینه
Cannot implicitly convert type 'string' to 'char'
چیکار کنم

----------


## SabaSabouhi

سلام
متغیر qq رو از جنس کاراکتر گرفتی ولی می‌خواهی بهش یه مقدار از جنس رشته بدی.
بجای "qq="AA باید مثلاً بنویسی 'qq='A یا این که کلاً بجای char از string استفاده کنی.
که در این حالت هم باید توی case بجای 'A' از "A" استفاده کنی.

صبا صبوحی

----------

