PDA

View Full Version : سوال: دسترسی به DataKeyNames در GridView !!



cactuskhan
پنج شنبه 26 اردیبهشت 1387, 17:27 عصر
سلام !
من به یه مشکلی برخورد کردم هر کدام از دوستان که عملا تست کردند و مطمئن هستند پاسخ بدند !
چطور میشه ما توی رویداد RowCommand در GridView به مقدار DataKeyNames که در GridView تنظیم کردیم، مثلا ID دسترسی داشته باشیم !؟؟؟
توی دیتاگرید اینکارو به راحتی انجام میدادم نیم خط کد بود ولی تو گرید ویو بد جوری گیر افتادم !:عصبانی++:

لطفا کمکم کنید !!!:افسرده: اگه ممکنه سی شارپ بگید !!

Behrouz_Rad
پنج شنبه 26 اردیبهشت 1387, 20:17 عصر
Key ها رو به خاصیت CommandArgument دکمه نسبت بده و با e.CommandArgument در RowCommand بازیابی کن.

موفق باشید.

hesam_a110
پنج شنبه 26 اردیبهشت 1387, 20:59 عصر
درود بر شما


protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
int id = GridView1.DataKeys[int.Parse(e.CommandArgument.ToString())].Value;
}

پیروز و نیک باشید

cactuskhan
جمعه 27 اردیبهشت 1387, 19:16 عصر
ممنون از پاسخگویی شما ! ولی من هم بخدا همین اینکارو می کنم ولی کامپایلر ایراد میگیره !


protected void GridViewGroupList_RowCommand(object sender, GridViewCommandEventArgs e)
{
int rowId = GridViewGroupList.DataKeys[int.Parse(e.CommandArgument.ToString())].Value;

}


میگه

Cannot implicitly convert type 'object' to 'int'. An explicit conversion exists (are you missing a cast?)

maryam_80
جمعه 27 اردیبهشت 1387, 19:45 عصر
با سلام

مقدار CommandArgument در حالت اوليه خالي مي باشد در نتيجه شما بايد ابتدا با استفاده از کد زير مقدار اوليه آنرا تعيين کنيد.لازم به ذکر است که اين کد را بايد در source code و در tag مربوط به command بنويسيد



<asp:LinkButtonID="BtnEdit"runat="server"CausesValidation="False"CommandName="Select"CommandArgument="<%# Container.DataItemIndex %>"
Text="Edit"></asp:LinkButton><br/>


و بعد در rowcommand اين کد را قرار بدهيد



GroupSystemID = Convert.ToInt32(GroupGridView.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString());


با اين کدها هر زمان که شما بر روي select کليک کنيد مقدار datakey را براي شما بر مي گرداند

Mojtaba_ss
جمعه 27 اردیبهشت 1387, 21:06 عصر
ممنون از پاسخگویی شما ! ولی من هم بخدا همین اینکارو می کنم ولی کامپایلر ایراد میگیره !


protected void GridViewGroupList_RowCommand(object sender, GridViewCommandEventArgs e)
{
int rowId = GridViewGroupList.DataKeys[int.Parse(e.CommandArgument.ToString())].Value;

}


میگه

Cannot implicitly convert type 'object' to 'int'. An explicit conversion exists (are you missing a cast?)

نکته: وقتی Key ها رو به CommandArgument نسبت میدید، نیازی نیست که بازم اونها رو به DataKeys مربوط به گرید ویو نسبت بدید.
وقتی از RowCommand دارید استفاده می کنید یعنی اینکه رویداد برای یه سطر می خواد که اجرا بشه پس اگه Key رو به CommandArgument کنترل مورد نظر نسبت بدید با استفاده از e.CommandArgument هم میتونید اون مقدار رو دریافت کنید.
میمونه که به DataType مناسب خودتون تبدیلش کنید.



e.CommandArgument

mona_z
شنبه 28 اردیبهشت 1387, 08:56 صبح
dim code as integer= gridviwe.DataKeys(e.Item.ItemIndex).ToString