PDA

View Full Version : سوال: عدم دسترسی به متن لیبل داخل گریدویو



mohsen.nsb44
چهارشنبه 24 اسفند 1390, 21:18 عصر
سلام من از findcontrol برای دسترسی به لیبل گرید ویو استفاده کردم
به اینصورت که در قسمت تمپلیت یک لیبل قرار دادم که به فیلد userName من در جدولم متصل میشه و اطلاعات رو میخونه
حالا من تو یه قسمتی میخوام متن این لیبل رو داشته باشم
لذا از کد زیر استفاده کردم

string userName=(GridView2.FindControl("lblUserName").ToString());
.
.
.

cmd.Parameters.AddWithValue("@userName",userName);
.
.
.



موقع ثبت اطلاعات ارور زیر رو میده
Object reference not set to an instance of an object.

fakhravari
چهارشنبه 24 اسفند 1390, 21:29 عصر
بعد به چه شکل میخواهید استفاده کنید؟ کمی توصیح بدهید که چی کار می خواهید بکنید
تو یه قسمتی میخوام متن این لیبل رو داشته باشم
دقیقا این کد در کجا صورت میگیرد . rowcoamnd ؟

sarapepors
چهارشنبه 24 اسفند 1390, 21:32 عصر
int index = GridView.SelectedIndex;
Label lablel_id = (Label)GridView.Rows[index].Cells[0].FindControl("field_id");


field_id هم id مربوط به کالمنی هست که میخواین مقدارش رو بخونید که باید template هم باشه.

mohsen.nsb44
چهارشنبه 24 اسفند 1390, 21:34 عصر
بعد به چه شکل میخواهید استفاده کنید؟ کمی توصیح بدهید که چی کار می خواهید بکنید
تو یه قسمتی میخوام متن این لیبل رو داشته باشم
دقیقا این کد در کجا صورت میگیرد . rowcoamnd ؟
تو سایتی که دارم طراحی میکنم قسمتی گزاشتم برای درخواست دوستی
این عمل زمانی هست که به پروفایل کاربری رفته باشی و مشخصات اونو تو گریدویو دیده باشی در این صفحه یک قسمتی وجود داره برای ارسال درخواست دوستی
برای اینکار به نام کاربری شخصی که میخوایم درخواست رو بفرستیم نیاز داریم من میخوام نام کاربریشو از گریدویویی که اطلاعاتشو نمایش میده بردارم
به همون خاطر اون کدو نوشتم

mohsen.nsb44
چهارشنبه 24 اسفند 1390, 21:36 عصر
int index = GridView.SelectedIndex;
Label lablel_id = (Label)GridView.Rows[index].Cells[0].FindControl("field_id");


field_id هم id مربوط به کالمنی هست که میخواین مقدارش رو بخونید که باید template هم باشه.
دوست عزیز این کد زمانی کار میکنه که سطری از گریدویو انتخاب بشه
در صورتی که گرید ویو من یک ایتم رو نمایش میده و نیازی به انتخاب سطر ندارم

sarapepors
چهارشنبه 24 اسفند 1390, 21:49 عصر
یعنی گرید ویوتون فقط یه ردیف داره ؟ اگه یه ردیف نداره بالاخره باید به صورتی اون ردیف خاص انتخاب بشه دیگه در ضمن کد شما مشکل داره اون هم اینه که از متد findcontorol استفاده کردین ولی مقدار مورد نظر رو به lable تبدیل نکردین . اگر یه ردیف داره میتونید جای index صفر بزارین.

sarapepors
چهارشنبه 24 اسفند 1390, 21:53 عصر
کدی که من نوشتم مقدار سل صفر ام ردیف شماره index رو میخونه و اون رو داخل یه lable میداره این کد رو از داخل یکی از پروژه ها کپی کردم .

mohsen.nsb44
چهارشنبه 24 اسفند 1390, 21:59 عصر
کدی که من نوشتم مقدار سل صفر ام ردیف شماره index رو میخونه و اون رو داخل یه lable میداره این کد رو از داخل یکی از پروژه ها کپی کردم .
دوست عزیز من نمیتونم از کد شما استفاده کنم چون من در قسمت تمپلیت کنترل گزاشتم و بایندش کردم به فیلد مورد نظر

fakhravari
چهارشنبه 24 اسفند 1390, 22:14 عصر
پس گرید 1 رکورد داره؟
این برسی کن
http://barnamenevis.org/showthread.php?319991-%D8%AB%D8%A8%D8%AA-%D8%AA%D9%85%D8%A7%D9%85%DB%8C-%D9%86%D9%85%D8%B1%D8%A7%D8%AA-%D8%A8%D8%A7-%DB%8C%DA%A9-%DA%A9%D9%84%DB%8C%DA%A9&highlight=%D8%AB%D8%A8%D8%AA+%D9%86%D9%85%D8%B1%D8 %A7%D8%AA+%D8%A8%D8%A7+%DB%8C%DA%A9+%DA%A9%D9%84%D B%8C%DA%A9
اگر نتونستی اعلام کن

mohsen.nsb44
پنج شنبه 25 اسفند 1390, 00:52 صبح
پس گرید 1 رکورد داره؟
این برسی کن
http://barnamenevis.org/showthread.php?319991-%D8%AB%D8%A8%D8%AA-%D8%AA%D9%85%D8%A7%D9%85%DB%8C-%D9%86%D9%85%D8%B1%D8%A7%D8%AA-%D8%A8%D8%A7-%DB%8C%DA%A9-%DA%A9%D9%84%DB%8C%DA%A9&highlight=%D8%AB%D8%A8%D8%AA+%D9%86%D9%85%D8%B1%D8 %A7%D8%AA+%D8%A8%D8%A7+%DB%8C%DA%A9+%DA%A9%D9%84%D B%8C%DA%A9
اگر نتونستی اعلام کن
نه دوست عزیز گرید من چندین رکورد داره از جمله نام و نام خانوادگی تاریخ تولد و ...
اما همه اینارو در قسمت تمپلیت گریدویو اونطور که خودم میخواستم چیدمشون
تنها چیزی که من نیاز دارم اینه که محتویات یکی از لیبل هایی که در قسمت تمپلیت قرار دادم و نام کاربری طرف رو نشون میده رو بطونم بهش دسترسی پیدا بکنم و اونو تو یه متغیر رشته ای بریزم

TeacherMath
پنج شنبه 25 اسفند 1390, 09:29 صبح
int index = GridView.SelectedIndex;
Label lablel_id = (Label)GridView.Rows[index].Cells[0].FindControl("field_id");


field_id هم id مربوط به کالمنی هست که میخواین مقدارش رو بخونید که باید template هم باشه.

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

mohsen.nsb44
پنج شنبه 25 اسفند 1390, 12:25 عصر
خوب به جای index شماره سطری که اطلاعات شما را داره وارد کن.
همانطور که گفتم گریدویو من انتخاب نمیشه که بخوام این عمل رو انجام بدم روش شما در صورتی صحیح هستش که گریدویو رو انتخاب کرد اما در برنامه من چنین عملی انجام نمیشود
یعنی نمیشود با استفاده از findControl یا چیز دیگری دسترسی پیدا کرد ؟

rana-writes
پنج شنبه 25 اسفند 1390, 21:09 عصر
يعني شما ميخواين از يه باتن خارج از گريد، محتويات اون گريد رو به قول خودتون نام كاربريشو انتخاب كنين؟
اگه كاري كه ميخواين انجام بدين همينه،‌فكر نمي كنم دسترسي به عناصر يه گريد بيرون از اون انجام بشه

mohsen.nsb44
پنج شنبه 25 اسفند 1390, 21:14 عصر
يعني شما ميخواين از يه باتن خارج از گريد، محتويات اون گريد رو به قول خودتون نام كاربريشو انتخاب كنين؟
اگه كاري كه ميخواين انجام بدين همينه،‌فكر نمي كنم دسترسي به عناصر يه گريد بيرون از اون انجام بشه
چرا نمیشه زمانی که بخوایم سطری از گریدویو انتخاب کنیم میشه ؟ اما زمانی که در حالت انتخاب باشه فعلا راهی پیدا نکردم
ایا با کنترل دیگری میشه اینکار رو انجام داد؟

sarapepors
جمعه 26 اسفند 1390, 10:02 صبح
نه دوست عزیز گرید من چندین رکورد داره از جمله نام و نام خانوادگی تاریخ تولد و ...
اما همه اینارو در قسمت تمپلیت گریدویو اونطور که خودم میخواستم چیدمشون
تنها چیزی که من نیاز دارم اینه که محتویات یکی از لیبل هایی که در قسمت تمپلیت قرار دادم و نام کاربری طرف رو نشون میده رو بطونم بهش دسترسی پیدا بکنم و اونو تو یه متغیر رشته ای بریزم
با این تفاسیر گرید ویوی شما چندین رکورد نداره بلکه چندیدن فیلد داره .
با این کد نگاه کنید فقط فیلد id رو از یک گریدویو براتون نمایش میدم که اون هم به یک فیلد در پایگاه داده و جدول لینکها بایند شده من تعجب میکنم شما میگین من این فیلد رو template کردم و توش کنترل گذاشتم شما وقتی تمپلیت کنید خود فیلد داری دو کنترل text box و label هست نیازی نیست شما اضافه کنید :



<asp:TemplateField Visible="False">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Link_id") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Link_id" runat="server" Text='<%# Bind("Link_id") %>'></asp:Label>
</ItemTemplate>
<ItemStyle Width="10px" />
</asp:TemplateField>


شما در این کد یک کنترل label دارید که id اون link_id هست حالا با همون کدی که من نوشتم میتونید به مقدار تکست این لیبل دسترسی داشته باشین این لیبل هم بایند شده.



Label lablel_id = (Label)GridView_Links.Rows[0].Cells[0].FindControl("Link_id");
string s = int.Parse(lablel_id.Text);

به این خاطر سل صفر ام رو میخونم که link _id اولین فیلد یک ردیف در گرید ویو است. امیدوارم کمکتون کرده باشم.

fakhravari
شنبه 27 اسفند 1390, 10:39 صبح
گرید ویو در حالت تمپلت sarapepors (http://barnamenevis.org/member.php?163142-sarapepors) از Rows[0].Cells[0]که نمیشه استفاده کرد.
نمیتونید در قسمت GridView1_RowCommand > id بگیرید بعد یه select بزنید و مقدارشو بگیرید.
<asp:Button ID="Button1" runat="server" CommandArgument='<%# Eval("ID") %>' CommandName="clik" Text="Button" />


یا روش دیگر
گرفتن مقدار id در بیرون از گرید.
<asp:Button ID="Button1" runat="server" OnClick="RadRating1_Rate" Text="Button" />
protected void RadRating1_Rate(object sender, EventArgs e)
{
Button t = (Button)sender;
GridViewRow row = (GridViewRow)t.NamingContainer;
string ID = GridView1.DataKeys[row.RowIndex].Value.ToString();
MessageBox("امتیاز: " + ID);
}

sarapepors
شنبه 27 اسفند 1390, 11:35 صبح
من از این کد استفاده میکنم همیشه هم جواب گرفتم درسته که در حالت template قرار داره اما ما با findcontorol کنترل لیبل موجود در row و cell صفر ام رو پیدا میکنیم . مگه این که مشکل چیز دیگه ایه که من متوجه نشدم.