PDA

View Full Version : درخواست کمک در مورد یک مشکل



mortezawolf
جمعه 29 آذر 1387, 13:08 عصر
سلام دوستان
من یکسری checkbox دارم که auto post back هستن و قراره که اگر اونارو تیک بزنیم جلوشون یکسری textbox ظاهر بشن.خب من این کارو انجام دادم.اما می خوام با زدن تیک اونا صفحم refresh نشه و اون textbox ها ظاهر بشن.فکر کنم باید با ajax یه کارایی کنم .اگر کمکم کنید خیلی ازتون ممنونم

emad_67
جمعه 29 آذر 1387, 14:43 عصر
سلام دوستان
من یکسری checkbox دارم که auto post back هستن و قراره که اگر اونارو تیک بزنیم جلوشون یکسری textbox ظاهر بشن.خب من این کارو انجام دادم.اما می خوام با زدن تیک اونا صفحم refresh نشه و اون textbox ها ظاهر بشن.فکر کنم باید با ajax یه کارایی کنم .اگر کمکم کنید خیلی ازتون ممنونم
نیازی به ajax نیست میتونی از جاوا اسکریپت استفاده کنی.
مثلا:


<script type="text/javascript">
function check()
{
document.getElementById("txtbox").style.display="";
}
</script>
</head>

<body>
<input type="checkbox" onclick="check();"/><br/>
<input id="txtbox" type="text" style="display: none;"/>
</body>

ضمنا عنوان تاپیک رو ویرایش کن و یه عنوان مرتبط بزار.

mortezawolf
یک شنبه 01 دی 1387, 13:39 عصر
ممنون از راهنمایی تون اما من با form aspکار کردم نه html لطفا با توجه به اون راهنمایی کنید

emad_67
یک شنبه 01 دی 1387, 14:07 عصر
به این شکل بنویس:

<head runat="server">
<title>Untitled Page</title>
<script type="text/javascript">
function check()
{
document.getElementById('<%= TextBox1.ClientID %>').style.display="";
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:CheckBox ID="CheckBox1" runat="server" />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></div>
</form>
</body>
</html>اینم بزار توی load صفحه:


CheckBox1.Attributes.Add("onclick", "check();");
TextBox1.Attributes.Add("style", "display: none;");
در واقع خاصیت ها رو در load صفحه به کنترل ها نسبت میدیم و در سمت کاربر با جاوا اسکپریت اونو ادیت میکنیم. ضمنا auto postback مربوط به checkbox رو هم false کن.

mortezawolf
یک شنبه 01 دی 1387, 14:52 عصر
یه دنیا ممنون

mortezawolf
یک شنبه 01 دی 1387, 15:44 عصر
این کد شما در form جواب می ده اما در datagrid جواب نمیده
اگر لطف کنین کد منو ببینید و بعدش راهنمایی کنید ممنون میشم:
<asp:DataGrid BackColor="#f7f3f3" CssClass="text" CellPadding="0" CellSpacing="0" id="MyDataGrid"

BorderColor="black"
BorderWidth="1"

AutoGenerateColumns="False"
runat="server">
<HeaderStyle BackColor="#00aaaa">
</HeaderStyle>
<Columns>
<asp:TemplateColumn HeaderText="تعداد">
<ItemTemplate>
<asp:TextBox Width="25" Visible="false" id="txtbox" Text="1" runat="server"/>
</ItemTemplate>
</asp:TemplateColumn>

<asp:TemplateColumn HeaderText="Select">
<ItemTemplate>
<asp:CheckBox runat="server" OnCheckedChanged="check" AutoPostBack="true" id="SelectCheckBox" Text="" Checked="False" />
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="fldprice" HeaderText="قیمت هر بسته" DataFormatString="{0:n0}" />
<asp:BoundColumn DataField="fldname" HeaderText="محصول"/>

<asp:BoundColumn DataField="fldid" HeaderText="Item"/>
</Columns>
</asp:DataGrid>


و

اینم قسمت c شارپش:
protectedvoid check(Object sender, EventArgs e)
{
int count = 0;
foreach (DataGridItem item in MyDataGrid.Items)
{
DetermineSelection12(item, ref count);
}
{



void DetermineSelection12(DataGridItem item, refint count)
{
CheckBox selection = (CheckBox)item.FindControl("SelectCheckBox");
TextBox txt = (TextBox)item.FindControl("txtbox");
if (selection != null)
{
if (selection.Checked)
{
this.massege.Visible = false;
txt.Visible = true;
txt.Focus();
count++;
}
else
{
txt.Visible = false;
}
}
}

mortezawolf
یک شنبه 01 دی 1387, 18:48 عصر
ضمنا می خواستم که اگر تیک برداشته بشه textbox دیگه ظاهر نشه

emad_67
یک شنبه 01 دی 1387, 22:59 عصر
خوب شما کار خاصی انجام ندادی که بخواد کار کنه. باید توی تابع DetermineSelection12که با findControl رفرنسی به چک باکس و تکس باکس ایجاد کردی به همون شکلی که من نوشته بودم با Attribute.Add مقدار onclick و style رو نسبت بدی. ضمنا باید id مربوط به هر textbox مورد نظر رو به رویداد onclick مربوط به checkbox ارسال کنی و فقط اون textbox رو ظاهر کنی نه همه رو.
این مورد بیشتر مربوط به تالار asp میشه. در اونجا پیگیری کن.

ضمنا می خواستم که اگر تیک برداشته بشه textbox دیگه ظاهر نشه
تابع رو به این شکل تغییر بده:


<html dir="rtl">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>New Page 1</title>
<script type="text/javascript">
function check(checked)
{
if(checked)
document.getElementById("txtbox").style.display="";
else
document.getElementById("txtbox").style.display="none";
}
</script>
</head>

<body>
<input type="checkbox" onclick="check(this.checked);" /><br/>
<input id="txtbox" type="text" style="display: none;"/>
</body>
</html>

mortezawolf
دوشنبه 02 دی 1387, 01:43 صبح
دوست عزیز از اینکه جوابمو می دی خیلی ممنونم
همونجور که در بالا هم گفتم این کد شما رو تو فرم امتحان کردم و جواب میده اما تو datagrid جواب نمیده
چون که txtbox و checkbox رو نمی تونه تو datagrid تشخیص بده
این erroro میده:


Compiler Error Message: CS0103: The name 'txtbox' does not exist in the current context


document.getElementById('<%= txtbox.ClientID %>').style.display="";


اینم تغییراتی که در کدم دادم.لطف کنو یه نگاهی کن و نظرتو بگو:
<script type="text/javascript">
function check(checked)
{
if(checked)
document.getElementById('<%= txtbox.ClientID %>').style.display="";
else
document.getElementById('<%= txtbox.ClientID %>').style.display="none";
}
</script>


<asp:DataGrid BackColor="#f7f3f3" CssClass="text" CellPadding="0" CellSpacing="0" id="MyDataGrid1" BorderColor="black" BorderWidth="1"

AutoGenerateColumns="False"
runat="server">
<HeaderStyle BackColor="#00aaaa">
</HeaderStyle>
<Columns>
<asp:TemplateColumn HeaderText="تعداد">
<ItemTemplate>
<asp:TextBox Width="25" Visible="false" id="txtbox" Text="1" runat="server"/>
</ItemTemplate>
</asp:TemplateColumn>

<asp:TemplateColumn HeaderText="Select">
<ItemTemplate>
<asp:CheckBox runat="server" id="SelectCheckBox" Text="" " />
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="fldprice" HeaderText="قیمت هر بسته" DataFormatString="{0:n0}" />

<asp:BoundColumn DataField="fldname" HeaderText="محصول"/>

<asp:BoundColumn DataField="fldid" HeaderText="Item"/>
</Columns>
</asp:DataGrid>


void DetermineSelection12(DataGridItem item, refint count)
{
CheckBox selection = (CheckBox)item.FindControl("SelectCheckBox");
TextBox txt = (TextBox)item.FindControl("txtbox");
txt.Attributes.Add("style", "display: none;");
selection.Attributes.Add("onclick", "check();");
if (selection != null)
{
if (selection.Checked)
{
this.massege.Visible = false;
txt.Visible = true;
txt.Focus();
count++;
}
else
{
txt.Visible = false;
}
}
}

emad_67
دوشنبه 02 دی 1387, 12:03 عصر
این erroro میده:


Compiler Error Message: CS0103: The name 'txtbox' does not exist in the current context


document.getElementById('<%= txtbox.ClientID %>').style.display="";
تابع جاوا اسکریپت رو به این شکل تغییر بده:


function check(id,checked)
{
if(checked)
document.getElementById(id).style.display="";
else
document.getElementById(id).style.display="none";
}
اینم حلقه foreach:


foreach (GridViewRow row in GridView1.Rows)
{
CheckBox chk = row.FindControl("SelectCheckBox") as CheckBox;
TextBox txt = row.FindControl("txtbox") as TextBox;
chk.Attributes.Add("onclick", "check('" + txt.ClientID + "',this.checked)");
txt.Attributes.Add("style", "display:none;");
}
توی حلقه رفرسی به checkbox و textbox موجود در gird ایجاد کردم و بعد به رویداد onclick چک باکس، id تکس باکس و مقدار this.checked رو ارسال کردم و .....
ضمنا من از gridview استفاده کردم که تو با کد خودت مطابقت بده.
همچنین کد هات رو بین تگ کد قرار بده تا خوانا تر باشه. و دیگه اینکه این سوالات مروبط به بخش asp.net هست.
اگر سوالی بود اون جا در تاپیک جدا بپرس. اینجا فقط سوالای مروبط به client.
موفق باشید ;)

mortezawolf
دوشنبه 02 دی 1387, 12:55 عصر
دوست من بازم ممنون که پاسخ دادی به دستورت عمل خواهم کرد ببینم چی می شه
ولی من این تاپیکو تو همه جا که مربوط بوده گذاشتم اما دریغ از یک پاسخ.فقط شما لطف میکنی و پاسخ می دی
بازم ازت ممنونم

raravaice
دوشنبه 02 دی 1387, 14:10 عصر
ولی من این تاپیکو تو همه جا که مربوط بوده گذاشتم اما دریغ از یک پاسخ.

علت اینکه پاسخ درستی نمیگیرید عنوان نامناسبی هست که برای تاپیک خود در نظر گرفته اید که یا منجر به پاک شدن تاپیک می شود و یا منجر به عدم پاسخ گویی.

موفق باشید

mortezawolf
دوشنبه 02 دی 1387, 15:49 عصر
دوست من
من کارایی که گفته بودی انجام دادم اما سر مطابقت دادن foreach با datagrid مشکل دارم چون که datagrid که rows نداره اونجا error میده
اگر راهنمایی کنی ممنون می شم

mortezawolf
دوشنبه 02 دی 1387, 15:51 عصر
لطفا با همون ساختار datagrid برام توضیح بدبن.tnx

emad_67
دوشنبه 02 دی 1387, 23:17 عصر
بفرما:

<asp:DataGrid ID="datagrid" runat="server" DataSourceID="SqlDataSource1">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:CheckBox ID="SelectCheckBox" runat="server" />
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<ItemTemplate>
<asp:TextBox ID="txtbox" runat="server" />
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>

foreach (DataGridItem row in datagrid.Items)
{
CheckBox chk = row.FindControl("SelectCheckBox") as CheckBox;
TextBox txt = row.FindControl("txtbox") as TextBox;
chk.Attributes.Add("onclick", "check('" + txt.ClientID + "',this.checked)");
txt.Attributes.Add("style", "display:none;");
}
تو جالا چرا از datagrod به جای gridview استفاده میکنی؟