مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

moonfa1392

عضویت از 1394/08/17

ارور There is no row at position 0.

  • یکشنبه 3 مرداد 1395
  • 04:31
تشکر میکنم

با سلام

این ارور رو دارم :

 

DAL run = new DAL();
        DataTable dt = new DataTable();
        string sqltext = string.Format("Select * From Tbl_Content Where ID={0} ", Request.QueryString["ID"]);
        dt = run.ExecuteQuery(sqltext);
        if (dt.Rows.Count == 0)
        {
            ID.Value = dt.Rows[0]["ID"].ToString();
            Title.Text = dt.Rows[0]["Title"].ToString();
            SmallText.Text = dt.Rows[0]["SmallText"].ToString();
            LongText.Text = dt.Rows[0]["LongText"].ToString();
            Subject.Value = dt.Rows[0]["SubjectID"].ToString();
            Picture.Text = dt.Rows[0]["SmallPicture"].ToString();
        }
        TextBox2.Text = Persia.Calendar.ConvertToPersian(DateTime.Now).Persian;

 

پاسخ های این پرسش

تعداد پاسخ ها : 10 پاسخ
کاربر سایت

سجاد باقرزاده

عضویت از 1392/02/24

  • یکشنبه 3 مرداد 1395
  • 08:52

شما در شرط خودتون گفتید اگر Row.Count==0 بود بره و مقدار ها رو بخونه . در این حالت Count == 0 مقداری در Table  شما نیست که بخواند. شما می بایست چک کنید در صورتی که if (dt.Rows.Count != 0) داخل شرط شود.

کاربر سایت

moonfa1392

عضویت از 1394/08/17

  • یکشنبه 3 مرداد 1395
  • 08:54

خیلی ممنون

اما استاد من این شرط if رو هم برمیدارم دقیقا همین ارور رو میده

کاربر سایت

سجاد باقرزاده

عضویت از 1392/02/24

  • یکشنبه 3 مرداد 1395
  • 08:58

چون مقداری داخل DataTable شما پر نشده است، دلیل آن می تواند یا مشکل در لایه DAL شما باشد یا اینکه هیچ رکوردی در دیتابیس شما ذخیره نشده است.

کاربر سایت

moonfa1392

عضویت از 1394/08/17

  • یکشنبه 3 مرداد 1395
  • 09:23

استاد لایه DAL مشکلی نداره درسته مطمئنم. بقیه جاها درست کار میکنه

این جدول دیتابیس هست:

این دیتالیست هست:

<asp:DataList OnItemCommand="DataList1_ItemCommand" ID="DataList1" runat="server">
                <ItemTemplate>
                    <ul>
                        <li>
                            <p><%# Eval("Title") %></p>
                            <asp:LinkButton ID="LinkButton1" CommandName="Edit" CommandArgument='<%#Eval("ID") %>' CssClass="Button1" runat="server">ویرایش</asp:LinkButton>
                            <span><%#Eval("DateReg") %></span>
                        </li>
                    </ul>
                </ItemTemplate>
            </asp:DataList>

 

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

public void Databind1()
    {
        DAL run = new DAL();
        DataTable dt = new DataTable();
        string sqlText = "select top 5 * from Tbl_Content where subjectid=4 order by id desc";
        dt = run.ExecuteQuery(sqlText);
        DataList1.DataSource = dt;
        DataList1.DataBind();
    }
    protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
    {
        if (e.CommandName == "Edit")
        {
            Response.Redirect("Panel.aspx?id=2");
        }
    }

 

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

حالا وقتی روی ویرایش هر سطر کلیک میکنم ریدایرکت میشه اینجا ==  Panel.aspx?id=2

حالا من توی Page-load این صفحه این کد رو نوشتم که مقادیر سطر رو بریزه توی این فیلد ها و ویرایش کنم :

DAL run = new DAL();
        DataTable dt = new DataTable();
        string sqltext = string.Format("Select * From Tbl_Content Where ID={0} ", Request.QueryString["ID"]);
        dt = run.ExecuteQuery(sqltext);
        if (dt.Rows.Count == 0)
        {
            ID.Value = dt.Rows[0]["ID"].ToString();
            Title.Text = dt.Rows[0]["Title"].ToString();
            SmallText.Text = dt.Rows[0]["SmallText"].ToString();
            LongText.Text = dt.Rows[0]["LongText"].ToString();
            Subject.Value = dt.Rows[0]["SubjectID"].ToString();
            Picture.Text = dt.Rows[0]["SmallPicture"].ToString();
        }
        TextBox2.Text = Persia.Calendar.ConvertToPersian(DateTime.Now).Persian;

 

اما مشکل اینجاست که این ارور رو میده و حتی اگه IF رو هم حذف کنم باز ارور میده:

 

البته فکر کنم مشکل از Request.QueryString["ID"] هست و اصلا رکوئست نمیگیره برای همین ارور میده!!!!!!

اما نمیفهمم مشکل از کجاست

کاربر سایت

سجاد باقرزاده

عضویت از 1392/02/24

  • یکشنبه 3 مرداد 1395
  • 09:54

مشکل شما زمان کلیک بروی دکمه Edit هر کدام از Item های DataList شماست که یک مقدار ثابت 2 را ارسال میکند و 2 در دیتابیس شما وجود ندارد . شما می بایست به شکل زیر دکمه Edit را کد نویسی کنید :

protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
{
    switch (e.CommandName)
    {
        case "Edit":
        {
            Response.Redirect(string.Format("/Panel.aspx?id={0}", e.CommandArgument));
            break;
        }
    }
}

 

کاربر سایت

moonfa1392

عضویت از 1394/08/17

  • یکشنبه 3 مرداد 1395
  • 10:04

نه استاد اینجوری که جور در نمیاد

آخه من از WebUserControl استفاده کردم برای پنل

یه جدول توی دیتابیس دارم به این صورت:

توی صفحه Panel.aspx.cs این کدنویسی رو کردم:

public void LoadControl()
    {
        if (Request.QueryString["id"] != null)
        {
            if (Request.QueryString["ID"].ToString() != "")
            {
                string text = string.Format("select * from Tbl_Controls where id={0}", Request.QueryString["ID"].ToString());
                DataTable dt = new DataTable();
                DAL run = new DAL();
                dt = run.ExecuteQuery(text);
                if (dt.Rows.Count > 0)
                {
                    UserControl uc = (UserControl)Page.LoadControl("~/Admin/Controls/" + dt.Rows[0]["Name"] + ".ascx");
                    Container.Controls.Add(uc);
                }
            }
        }
    }

حالا توی پوشه Controls هر WebUserControl که باز کنم اسمش هرچی باشه توی دیتابیس سطر ایجاد میکنم ID اون سطر رو جلوی آدرس پنل بذارم، اون WebUserControl باز میشه

الان توی دیتابیس کلا چند تا سطر برای چند تا WebUserControl هست که هر کدوم یه ID مشخص داره. صفحه ویرایش مطلب ID=2 هست و آدرسش میشه Panel.aspx?id=2

حالا اگه کد رو به این صورت که شما گفتین بذارم یه آدرس جدید ایجاد میکنه که جلوش ID اون سطر کلیک شده رو میاره مثلا Panel.aspx?id=1002 یا اینجور چیزی که یه صفحه سفید هست :


کاربر سایت

سجاد باقرزاده

عضویت از 1392/02/24

  • یکشنبه 3 مرداد 1395
  • 10:25

اگر درست متوجه شده باشم شما از کوئری استرینگ ID دارید به عنوان کد پنل استفاده میکنید :

public void LoadControl()
    {
        if (Request.QueryString["id"] != null)
        {
            if (Request.QueryString["ID"].ToString() != "")
            {
                string text = string.Format("select * from Tbl_Controls where id={0}", Request.QueryString["ID"].ToString());
                DataTable dt = new DataTable();
                DAL run = new DAL();
                dt = run.ExecuteQuery(text);
                if (dt.Rows.Count > 0)
                {
                    UserControl uc = (UserControl)Page.LoadControl("~/Admin/Controls/" + dt.Rows[0]["Name"] + ".ascx");
                    Container.Controls.Add(uc);
                }
            }
        }
    }

و از همون کد برای دکمه ویرایش آیتم DataList هم استفاده میکنید :

DAL run = new DAL();
        DataTable dt = new DataTable();
        string sqltext = string.Format("Select * From Tbl_Content Where ID={0} ", Request.QueryString["ID"]);
        dt = run.ExecuteQuery(sqltext);
        if (dt.Rows.Count == 0)
        {
            ID.Value = dt.Rows[0]["ID"].ToString();
            Title.Text = dt.Rows[0]["Title"].ToString();
            SmallText.Text = dt.Rows[0]["SmallText"].ToString();
            LongText.Text = dt.Rows[0]["LongText"].ToString();
            Subject.Value = dt.Rows[0]["SubjectID"].ToString();
            Picture.Text = dt.Rows[0]["SmallPicture"].ToString();
        }
        TextBox2.Text = Persia.Calendar.ConvertToPersian(DateTime.Now).Persian;

این Request.QueryString["ID"] یا باید کد Tbl_Controls باشد یا کد Tbl_Content !!!

شما میتوانید با کوئری کد Tbl_Controls و Tbl_Content رابا هم دیگر ارسال کنید :

Response.Redirect(string.Format("/Panel.aspx?panelId={0}&contentId={1}",2, e.CommandArgument));

 

کاربر سایت

moonfa1392

عضویت از 1394/08/17

  • یکشنبه 3 مرداد 1395
  • 10:37

الان به این صورت باهم ارسال کردم باز هم همون ارور رو میده

protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
    {
        switch (e.CommandName)
        {
            case "Edit":
                {
                    Response.Redirect(string.Format("Panel.aspx?id={0}&{1}", 2, e.CommandArgument));
                    break;
                }
        }
    }

 

آدرس صفحه هم به این صورت ریدایرکت میشه:

Panel.aspx?id=2&1007

 

اون Request.QueryString["ID"] کد Tbl_Content هست اصلا ربطی به Tbl_Control نداره!!!

کاربر سایت

سجاد باقرزاده

عضویت از 1392/02/24

  • یکشنبه 3 مرداد 1395
  • 10:54

شما کوئری استرینگتون رو اشتباه میفرستید به مثال من توجه کنید برای هر مقدار میبایست یک متغیر درنظر بگیرید :مثلا id و یکی دیگه به اسم contentId :

Response.Redirect(string.Format("/Panel.aspx?id={0}&contentId={1}",2, e.CommandArgument));

وبرای درخواست میبایست نام متغیرها را صدابزنید تا مقدار درست را بگیرید.

کاربر سایت

moonfa1392

عضویت از 1394/08/17

  • یکشنبه 3 مرداد 1395
  • 11:08

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

یک هفته بود داشتم روی این ارور وقت میذاشتم

باز هم متشکرم heart

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)