0% found this document useful (0 votes)
48 views

Data Repeater

This document discusses a book that teaches programming databases in Visual Basic .NET 2010 and C# 2010 from the beginning level to advanced level. The book assumes no prior knowledge of databases and teaches fundamental concepts, how to create databases in Access and SQL Server 2008, write SQL queries, and use ADO.NET to interact with databases in .NET projects. It covers over 135 classes and records in the framework and explains over 50 sample projects.

Uploaded by

ehwede2
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
48 views

Data Repeater

This document discusses a book that teaches programming databases in Visual Basic .NET 2010 and C# 2010 from the beginning level to advanced level. The book assumes no prior knowledge of databases and teaches fundamental concepts, how to create databases in Access and SQL Server 2008, write SQL queries, and use ADO.NET to interact with databases in .NET projects. It covers over 135 classes and records in the framework and explains over 50 sample projects.

Uploaded by

ehwede2
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 50

 

Data Repeater
 

١
‫ﺤﺎﻟﻴﺎ ﺒﺎﻟﻤﻜﺘﺒﺎﺕ‬

‫ﻤﻥ ﺍﻟﺼﻔﺭ ﺇﻟﻰ ﺍﻻﺤﺘﺭﺍﻑ‪ :‬ﺒﺭﻤﺠﺔ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ‬


‫ﻓﻲ ﻓﻴﺠﻴﻭﺍل ﺒﻴﺯﻴﻙ ﺩﻭﺕ ﻨﺕ ‪٢٠١٠‬‬

‫ﻭﺘﻭﺠﺩ ﺃﻴﻀﺎ ﻨﺴﺨﺔ ﺴﻲ ﺸﺎﺭﺏ ﻤﻥ ﺍﻟﻜﺘﺎﺏ‪:‬‬

‫ﻤﻥ ﺍﻟﺼﻔﺭ ﺇﻟﻰ ﺍﻻﺤﺘﺭﺍﻑ‪ :‬ﺒﺭﻤﺠﺔ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ‬


‫ﻓﻲ ﺴﻲ ﺸﺎﺭﺏ ‪٢٠١٠‬‬

‫ﺒﻘﻠﻡ‪ :‬ﻡ‪ .‬ﻤﺤﻤﺩ ﺤﻤﺩﻱ ﻏﺎﻨﻡ‬

‫ﻴﻔﺘﺭﺽ ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ ﺃﻨﻙ ﻻ ﺘﻤﻠﻙ ﺃﻴﺔ ﻤﻌﺭﻓﺔ ﻤﺴﺒﻘﺔ ﺒﻘﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﺍﻟﺒﺭﺍﻤﺞ ﺍﻟﺘﻲ ﺘﻨﺸﺌﻬﺎ ﺒﻬﺎ‪،‬‬
‫ﻟﻬﺫﺍ ﻓﻬﻭ ﻴﺒﺩﺃ ﻤﻌﻙ ﻤﻥ ﺍﻟﺼﻔﺭ‪ ،‬ﻟﻴﻌﺭﻓﻙ ﻋﻠﻰ ﺍﻟﻤﻔﺎﻫﻴﻡ ﺍﻷﺴﺎﺴﻴﺔ ﺍﻟﻼﺯﻤﺔ ﻟﻠﺘﻌﺎﻤل ﻤﻊ ﻗﻭﺍﻋـﺩ‬
‫ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﻭﻜﻴﻑ ﺘﻨﺸﺌﻬﺎ ﻓﻲ ‪ Access‬ﻭ ‪ ،SQL Server 2008‬ﻭﻜﻴﻑ ﺘﻜﺘﺏ ﺍﻻﺴـﺘﻌﻼﻤﺎﺕ‬
‫ﺍﻟﺘﻲ ﺘﺤﺼل ﺒﻬﺎ ﻋﻠﻰ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﺎﺴﺘﺨﺩﺍﻡ ﻟﻐﺔ ‪ ..SQL‬ﺒﻌﺩ ﻫﺫﺍ ﻴﻌﻠﻤﻙ ﺍﻟﻜﺘﺎﺏ ﻜﻴﻑ ﺘﺘﻌﺎﻤل ﻤﻊ‬
‫ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻤﻥ ﺩﺍﺨل ﻤﺸﺎﺭﻴﻊ ﺩﻭﺕ ﻨﺕ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺘﻘﻨﻴﺔ ‪.ADO.NET‬‬
‫ﻭﻴﻐﻁﻲ ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ ﺒﺎﻟﺘﻔﺼﻴل ﺤﻭﺍﻟﻲ ‪ ١٣٥‬ﻭﺍﺠﻬﺔ ﻭﻓﺌﺔ ﻭﺴﺠﻼ ﻤﻥ ﻤﻜﺘﺒﺔ ﺇﻁﺎﺭ ﺍﻟﻌﻤل‪ ،‬ﻜﻤﺎ‬
‫ﻴﺸﺭﺡ ﺒﺎﻟﺘﻔﺼﻴل ﺃﻜﺜﺭ ﻤﻥ ‪ ٥٠‬ﻤﺸﺭﻭﻋﺎ ﻤﺘﻨﻭﻋﺎ ﺘﻐﻁﻲ ﻤﺤﺘﻭﻴﺎﺘﻪ‪ ،‬ﻟﺘﺘﻌﻠﻡ ﻤﻥ ﺨﻼﻟﻬﺎ‪:‬‬

‫‪٢‬‬
‫‪ -‬ﻜﻴﻑ ﺘﻨﻘل ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﻴﻥ ﻨﻭﻋﻴﻥ ﻤﺨﺘﻠﻔﻴﻥ ﻤﻥ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ‪.‬‬
‫‪ -‬ﻜﻴﻑ ﺘﺤﻔﻅ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻟﺜﻨﺎﺌﻴﺔ ‪ Binary Data‬ﻓﻲ ﻤﻠﻔﺎﺕ ﻤﺴﺘﻘﻠﺔ ﻋﻠﻰ ﺍﻟﺨﺎﺩﻡ ﺨﺎﺭﺝ ﻗﺎﻋﺩﺓ‬
‫ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ‪.SQL Server 2008‬‬
‫‪Table-Valued‬‬ ‫‪ -‬ﻜﻴﻑ ﺘﻌﺭ‪‬ﻑ ﺍﻟﻤﻌـﺎﻤﻼﺕ ‪ Parameters‬ﻭﺍﻟﻤﻌـﺎﻤﻼﺕ ﺍﻟﺠﺩﻭﻟﻴـﺔ‬
‫‪ ،Parameters‬ﻭﻜﻴﻑ ﺘﺴﺘﺨﺩﻤﻬﺎ ﻟﺘﻤﺭﻴﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺇﻟﻰ ﺍﻹﺠﺭﺍﺀﺍﺕ ﺍﻟﻤﺨﺯﻨﺔ ﻓـﻲ ‪SQL‬‬
‫‪.Server 2008‬‬
‫‪SQL‬‬ ‫‪ -‬ﻜﻴﻑ ﺘﺤﻤﻲ ﻗﺎﻋﺩﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻤﻥ ﺍﻟﻘﺭﺍﺼﻨﺔ ﺍﻟﺫﻴﻥ ﻴﺤـﺎﻭﻟﻭﻥ ﺩﺱ ﺍﻻﺴـﺘﻌﻼﻤﺎﺕ‬
‫‪ Injection‬ﻤﻥ ﺨﻼل ﻤﺸﺭﻭﻋﻙ‪.‬‬
‫‪ -‬ﻜﻴﻑ ﺘﻘﺭﺃ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻟﺜﻨﺎﺌﻴﺔ ﻭﺍﻟﻨﺼﻴﺔ ﺍﻟﻀﺨﻤﺔ ﺘﺘﺎﺒﻌﻴـﺎ ‪ Sequentially‬ﻋﻠـﻰ ﺼـﻭﺭﺓ‬
‫ﺃﺠﺯﺍﺀ ﻤﻥ ﻗﻭﺍﻋﺩ ﺒﻴﺎﻨﺎﺕ ‪.SQL Server 2008‬‬
‫‪ -‬ﻜﻴﻑ ﺘﻨﺸﺊ ﺍﻹﺠﺭﺍﺀﺍﺕ ﺍﻟﻤﺨﺯﻨﺔ ﻓﻲ ‪.Access‬‬
‫‪ -‬ﻜﻴﻑ ﺘﺤﻔﻅ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﻤﻠﻑ ‪ XML‬ﻭﻜﻴﻑ ﺘﺴﺘﻌﻴﺩﻫﺎ ﻤﻨﻪ ﻤﺭﺓ ﺃﺨﺭﻯ‪.‬‬
‫‪ -‬ﻜﻴﻑ ﺘﺘﻌﺎﻤل ﻤﻊ ﻋﻼﻗﺔ ﻭﺍﺤﺩ ﺒﻤﺘﻌﺩﺩ ‪ ،One-To-Many Relation‬ﻭﻋﻼﻗـﺔ ﻤﺘﻌـﺩﺩ‬
‫ﺒﻤﺘﻌﺩﺩ ‪ ،Many-To-Many Relation‬ﻭﺍﻟﻌﻼﻗﺔ ﺍﻟﺫﺍﺘﻴﺔ ‪.Self Relation‬‬
‫‪ -‬ﻜﻴﻑ ﺘﺴﺘﺨﺩﻡ ﻤﺼﺎﻨﻊ ﺍﻟﻤﺯﻭﺩﺍﺕ ‪ Provider Factories‬ﻟﻜﺘﺎﺒﺔ ﻓﺌﺎﺕ ﻋﺎﻤﺔ ﻗﺎﺩﺭﺓ ﻋﻠﻰ‬
‫ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺃﻱ ﻨﻭﻉ ﻤﻥ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﻤﻤﺎ ﻴﺨﺘﺼﺭ ﺍﻟﻜﻭﺩ ﺍﻟﺫﻱ ﺘﻜﺘﺒﻪ‪ ،‬ﻭﻴﻤﻬـﺩ ﻟـﻙ‬
‫ﺍﻟﻁﺭﻴﻕ ﻹﻨﺸﺎﺀ ﻤﺸﺎﺭﻴﻊ ﻤﺘﻌﺩﺩﺓ ﺍﻟﻁﺒﻘﺎﺕ ‪.N-Tier Applications‬‬
‫‪ -‬ﻜﻴﻑ ﺘﺤل ﻤﺸﺎﻜل ﺘﺼﺎﺭﻉ ﺃﻜﺜﺭ ﻤﻥ ﻤﺴﺘﺨﺩﻡ ﻋﻠﻰ ﺤﻔﻅ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓـﻲ ﻨﻔـﺱ ﺍﻟﻠﺤﻅـﺔ‬
‫ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﺘﻁﺎﺒﻕ ﺍﻟﻤﺘﻔﺎﺌل ‪.Optimistic Concurrency‬‬
‫‪ -‬ﻜﻴﻑ ﺘﻨﺸﺊ ﺃﻨﻭﺍﻋﺎ ﺠﺩﻴﺩﺓ ﻤﻥ ﺃﻋﻤﺩﺓ ﺠﺩﻭل ﺍﻟﻌﺭﺽ‪ ،‬ﺘﻌﺭﺽ ﺨﺎﻨﺎﺘﻬﺎ ﺃﺩﺍﺓ ﺍﺨﺘﻴﺎﺭ ﺍﻟﺘﺎﺭﻴﺦ‬
‫ﺃﻭ ﺸﺠﺭﺓ ﻤﻨﺴﺩﻟﺔ ﺃﻭ ﺃﻱ ﻨﻭﻉ ﺁﺨﺭ ﺘﺭﻴﺩﻩ ﻤﻥ ﺍﻷﺩﻭﺍﺕ‪.‬‬
‫‪ -‬ﻜﻴﻑ ﺘﺠﻌل ﺠﺩﻭل ﺍﻟﻌﺭﺽ ﻴﻌﻤل ﻓﻲ ﺍﻟﻭﻀﻊ ﺍﻻﻓﺘﺭﺍﻀـﻲ ‪ Virtual Mode‬ﻭﻜﻴـﻑ‬
‫ﺘﻀﻴﻑ ﺇﻟﻴﻪ ﺘﻘﻨﻴﺔ ﺘﻘﺴﻴﻡ ﺍﻟﺴﺠﻼﺕ ﻋﻠﻰ ﺼﻔﺤﺎﺕ ﻋﺭﺽ ﻤﺨﺘﻠﻔﺔ ‪.Paging‬‬
‫‪٣‬‬
‫‪ -‬ﻜﻴﻑ ﺘﺤﺴﻥ ﺃﺩﺍﺀ ﺒﺭﻨﺎﻤﺠﻙ ﺒﺘﻭﻓﻴﺭ ﺃﻜﺒﺭ ﻗﺩﺭ ﻤﻥ ﺍﻟﺫﺍﻜﺭﺓ‪ ،‬ﻭﻜﻴﻑ ﺘﺤﺎﻓﻅ ﻋﻠﻰ ﻜﻔﺎﺀﺓ ﺨﺎﺩﻡ‬
‫ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﺒﺘﻘﻠﻴل ﻋﺩﺩ ﺍﻻﺘﺼﺎﻻﺕ ﻭﻭﻗﺕ ﻜل ﺍﺘﺼﺎل ﺒﻘﺩﺭ ﺍﻹﻤﻜﺎﻥ‪.‬‬
‫ﻟﻜل ﻫﺫﺍ ﻴﻌﺘﺒﺭ ﺍﻟﻜﺘﺎﺏ ﻤﺭﺠﻌﺎ ﻤﻔﺼﻼ ﻤﺒﻭﺒﺎ‪ ،‬ﻴﻤﻜﻥ ﻟﻘﺎﺭﺌﻪ ﺍﻟﺭﺠﻭﻉ ﺇﻟﻴﻪ ﻋﻨـﺩ ﺍﻟﺒﺤـﺙ ﻋـﻥ‬
‫ﺘﻔﺎﺼﻴل ﺃﻱ ﻓﺌﺔ ﺃﻭ ﺨﺎﺼﻴﺔ ﺃﻭ ﻭﺴﻴﻠﺔ ﺃﻭ ﺤﺩﺙ‪ ،‬ﻓﻲ ﻨﻔﺱ ﺍﻟﻭﻗﺕ ﺍﻟﺫﻱ ﻴﻌﺘﺒﺭ ﺼﺎﻟﺤﺎ ﻟﻠﻘـﺭﺍﺀﺓ‬
‫ﻜﻜﺘﺎﺏ ﺘﻌﻠﻴﻤﻲ ﻋﻤﻠﻲ ﻤﺭﺘﺏ ﻤﻥ ﺍﻷﺴﻬل ﺇﻟﻰ ﺍﻷﺼﻌﺏ‪ ،‬ﻴﻨﻘل ﺇﻟﻰ ﺍﻟﻤﺒـﺭﻤﺞ ﻓـﻲ ﺼـﻔﺤﺎﺕ‬
‫ﻤﻌﺩﻭﺩﺍﺕ ﺨﺒﺭﺓ ﺴﻨﻭﺍﺕ ﻓﻲ ﺒﺭﻤﺠﺔ ﺘﻁﺒﻴﻘﺎﺕ ﻗﻭﺍﻋﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﻭﻴﺭﺸـﺩﻩ ﺇﻟـﻰ ﻜﻴﻔﻴـﺔ ﺤـل‬
‫ﺍﻟﻤﺸﻜﻼﺕ ﻏﻴﺭ ﺍﻟﻤﺘﻭﻗﻌﺔ ﺍﻟﺘﻲ ﺘﻭﺍﺠﻬﻪ ﻓﻲ ﻫﺫﺍ ﺍﻟﻤﺠﺎل‪.‬‬
‫ﺒﺎﺨﺘﺼﺎﺭ‪ :‬ﻫﺫﺍ ﻫﻭ ﺍﻟﻜﺘﺎﺏ ﺍﻟﺫﻱ ﺘﺒﺤﺙ ﻋﻨﻪ‪.‬‬

‫ﺇﺼﺩﺍﺭﺍﺕ ﺍﻟﻜﺎﺘﺏ ﻓﻲ ﻤﺠﺎل ﺍﻟﺒﺭﻤﺠﺔ‪:‬‬


‫ﻓﻴﺠﻴﻭﺍل ﺴﺘﺩﻴﻭ ﺩﻭﺕ ﻨﺕ ﻤﻥ ﺍﻟﺼﻔﺭ ﺇﻟﻰ ﺍﻻﺤﺘﺭﺍﻑ‬

‫ﻫل ﻓﻜﺭﺕ ﻴﻭﻤﺎ ﻓﻲ ﺘﻌﻠﻡ ﺍﻟﺒﺭﻤﺠﺔ ﻟﻜﻨﻙ ﻨﻔﻀﺕ ﺍﻟﻔﻜﺭﺓ ﻋﻥ ﺭﺃﺴﻙ ﻟﻅﻨﻙ ﺃﻥ ﺍﻟﺒﺭﻤﺠﺔ ﺃﺼﻌﺏ‬
‫ﻤﻥ ﺃﻥ ﺘﺘﻌﻠﻤﻬﺎ؟‬
‫ﻫل ﺘﻌﺘﻘﺩ ﺃﻥ ﺍﻟﺒﺭﻤﺠﺔ ﻤﺼﻤﻤﺔ ﻟﺸﺨﺹ ﺁﺨﺭ ﻏﻴﺭﻙ ﻴﻤﺘﻠﻙ ﻗﺩﺭﺍﺕ ﻻ ﺘﻤﺘﻠﻜﻬﺎ؟‬
‫ﻫل ﻴﻘﻑ ﺤﺎﺠﺯ ﺍﻟﻠﻐﺔ ﺍﻹﻨﺠﻠﻴﺯﻴﺔ ﺒﻴﻨﻙ ﻭﺒﻴﻥ ﺍﻟﺘﻌﻠﻡ‪ ،‬ﺒﻴﻨﻤﺎ ﺘﻅﻥ ﺃﻥ ﺍﻟﻜﺘﺏ ﺍﻟﻌﺭﺒﻴﺔ ﻀﻌﻴﻔﺔ ﺃﻭ‬
‫ﻏﻴﺭ ﻭﺍﻓﻴﺔ ﺃﻭ ﺭﻜﻴﻜﺔ ﺍﻟﺘﺭﺠﻤﺔ ﺃﻭ ﺍﻷﺴﻠﻭﺏ؟‬
‫ﻨﺤﻥ ﻨﻘﺩﻡ ﻟﻙ ﻫﻨﺎ ﻤﺎ ﺘﺒﺤﺙ ﻋﻨﻪ‪:‬‬

‫‪٤‬‬
‫‪-١-‬‬
‫ﻤﻥ ﺍﻟﺼﻔﺭ ﺇﻟﻰ ﺍﻻﺤﺘﺭﺍﻑ‪ :‬ﻓﻴﺠﻴﻭﺍل ﺒﻴﺯﻴﻙ ﺩﻭﺕ ﻨﺕ ‪٢٠١٠‬‬
‫ﻟﺘﺤﻤﻴل ﺜﻼﺜﺔ ﻓﺼﻭل ﻤﺠﺎﻨﻴﺔ ﻤﻥ ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ‪ ،‬ﻤﻨﻬﺎ ﻓﺼل ﻋﻥ ﺍﻻﺴﺘﻌﻼﻡ ﺍﻟﻤﺘﻜﺎﻤل ﻤﻊ ﺍﻟﻠﻐـﺔ‬
‫‪ ،LinQ‬ﻭﻓﺼل ﻋﻥ ﺘﺎﺭﻴﺦ ﺘﻁﻭﺭ ﺍﻟﺤﺎﺴﺏ‪ ،‬ﻭﻓﺼل ﻋﻥ ﺍﻟﻌﻼﻗﺔ ﺍﻟﻤﺜﻴﺭﺓ ﺒﻴﻥ ﻨﻅﻡ ﺍﻟﺘـﺸﻐﻴل‬
‫ﻭﺍﻟﺤﻤﺽ ﺍﻟﻨﻭﻭﻱ ﺍﻟﻭﺭﺍﺜﻲ ‪ DNA‬ﺍﻀﻐﻁ ﻫﻨﺎ‪:‬‬
‫‪http://www.elmaktba.com/vb2008.zip‬‬

‫‪-٢-‬‬
‫ﻤﻥ ﺍﻟﺼﻔﺭ ﺇﻟﻰ ﺍﻻﺤﺘﺭﺍﻑ‪ :‬ﺒﺭﻤﺠﺔ ﺇﻁﺎﺭ ﺍﻟﻌﻤل‬
‫‪.NET Framework Programming‬‬
‫ﻓﻲ ﻓﻴﺠﻴﻭﺍل ﺒﻴﺯﻴﻙ ﺩﻭﺕ ﻨﺕ ‪٢٠٠٨‬‬

‫‪٥‬‬
‫‪-٣-‬‬
‫ﻤﻥ ﺍﻟﺼﻔﺭ ﺇﻟﻰ ﺍﻻﺤﺘﺭﺍﻑ‪ :‬ﺒﺭﻤﺠﺔ ﻨﻤﺎﺫﺝ ﺍﻟﻭﻴﻨﺩﻭﺯ‬
‫‪Windows Forms Programming‬‬
‫ﻓﻲ ﻓﻴﺠﻴﻭﺍل ﺒﻴﺯﻴﻙ ﺩﻭﺕ ﻨﺕ ‪٢٠٠٨‬‬

‫‪-٤-‬‬
‫ﻤﻥ ﺍﻟﺼﻔﺭ ﺇﻟﻰ ﺍﻻﺤﺘﺭﺍﻑ‪ :‬ﺴﻲ ﺸﺎﺭﺏ ‪٢٠٠٨‬‬
‫ﻟﺘﺤﻤﻴل ﺜﻼﺜﺔ ﻓﺼﻭل ﻤﺠﺎﻨﻴﺔ ﻤﻥ ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ‪ ،‬ﺍﻀﻐﻁ ﻫﻨﺎ‪:‬‬
‫‪http://www.elmaktba.com/csharp2008.zip‬‬

‫‪٦‬‬
‫‪-٥-‬‬
‫ﻤﻥ ﺍﻟﺼﻔﺭ ﺇﻟﻰ ﺍﻻﺤﺘﺭﺍﻑ‪ :‬ﺒﺭﻤﺠﺔ ﺇﻁﺎﺭ ﺍﻟﻌﻤل‬
‫‪.NET Framework Programming‬‬
‫ﻓﻲ ﺴﻲ ﺸﺎﺭﺏ ‪٢٠٠٨‬‬

‫‪-٦-‬‬
‫ﻤﻥ ﺍﻟﺼﻔﺭ ﺇﻟﻰ ﺍﻻﺤﺘﺭﺍﻑ‪ :‬ﺒﺭﻤﺠﺔ ﻨﻤﺎﺫﺝ ﺍﻟﻭﻴﻨﺩﻭﺯ‬
‫‪Windows Forms Programming‬‬
‫ﻓﻲ ﺴﻲ ﺸﺎﺭﺏ ‪٢٠٠٨‬‬

‫‪٧‬‬
‫‪-٧-‬‬
‫ﻓﻴﺠﻴﻭﺍل ﺒﻴﺯﻴﻙ ﻭﺴﻲ ﺸﺎﺭﺏ‪:‬‬
‫ﻁﺭﻴﻘﻙ ﺍﻟﻤﺨﺘﺼﺭ ﻟﻼﻨﺘﻘﺎل ﻤﻥ ﺇﺤﺩﻯ ﺍﻟﻠﻐﺘﻴﻥ ﺇﻟﻰ ﺍﻷﺨﺭﻯ‪.‬‬

‫‪-٨-‬‬
‫ﺍﻟﻤﺒﺭﻤﺞ ﺍﻟﺼﻐﻴﺭ‪ :‬ﺍﻟﺨﻁﻭﺓ ﺍﻷﻭﻟﻰ‬
‫ﺘﻌﻠﻡ ﺍﻟﺒﺭﻤﺠﺔ ﺒﻔﻴﺠﻴﻭﺍل ﺒﻴﺯﻴﻙ ﺩﻭﺕ ﻨﺕ‪.‬‬
‫ﻭﻴﻤﻜﻨﻙ ﺘﺤﻤﻴل ﺍﻟﻜﺘﺏ ﺍﻟﺘﺎﻟﻴﺔ ﻤﺠﺎﻨﺎ‪:‬‬
‫‪ -‬ﺃﺴﺌﻠﺔ ﻭﺍﻤﺘﺤﺎﻨﺎﺕ ﻓﻲ ﻤﻨﻬﺞ ﺍﻟﺤﺎﺴﺏ ﺍﻵﻟﻲ ﻟﻠﺼﻑ ﺍﻟﺜﺎﻟﺙ ﺍﻹﻋﺩﺍﺩﻱ‪ ،‬ﺍﻟﻔﺼل ﺍﻟﺩﺭﺍﺴﻲ ﺍﻷﻭل‬
‫‪ -‬ﻜﺘﺎﺏ ﺍﻟﺸﺭﺡ ﻓﻲ ﻤﻨﻬﺞ ﺍﻟﺤﺎﺴﺏ ﺍﻵﻟﻲ ﻟﻠﺼﻑ ﺍﻟﺜﺎﻟﺙ ﺍﻹﻋﺩﺍﺩﻱ‪ ،‬ﺍﻟﻔﺼل ﺍﻟﺩﺭﺍﺴﻲ ﺍﻟﺜﺎﻨﻲ‬
‫‪ -‬ﺃﺴﺌﻠﺔ ﻭﺍﻤﺘﺤﺎﻨﺎﺕ ﻓﻲ ﻤﻨﻬﺞ ﺍﻟﺤﺎﺴﺏ ﺍﻵﻟﻲ ﻟﻠﺼﻑ ﺍﻟﺜﺎﻟﺙ ﺍﻹﻋﺩﺍﺩﻱ‪ ،‬ﺍﻟﻔﺼل ﺍﻟﺩﺭﺍﺴﻲ ﺍﻟﺜﺎﻨﻲ‬

‫ﺃﻤـﺎﻜــﻥ ﺍﻟﺒﻴــﻊ‪:‬‬

‫‪ -‬ﻤﻜﺘﺒﺔ ﺩﺍﺭ ﺍﻟﻤﻌﺭﻓﺔ‪:‬‬


‫‪ ٤‬ﺸﺎﺭﻉ ﺍﻟﺴﺭﺍﻴﺎﺕ ـ ﺃﻤﺎﻡ ﻫﻨﺩﺴﺔ ﻋﻴﻥ ﺸﻤﺱ ـ ﺒﺎﻟﻘﺭﺏ ﻤﻥ ﻤﻴﺩﺍﻥ ﻋﺒـﺩﻩ ﺒﺎﺸـﺎ ـ‬
‫ﺍﻟﻌﺒﺎﺴﻴﺔ ـ ﺍﻟﻘﺎﻫﺭﺓ‪.‬‬

‫‪ -‬ﺩﺍﺭ ﺤﺭﺍﺀ‪ ،‬ﺩﺍﺭ ﺍﻟﺴﺤﺎﺏ‪ ،‬ﻤﻜﺘﺒﺔ ﺸﺎﺩﻱ‪ ،‬ﻤﻜﺘﺒﺔ ﺍﻟﻨﻬﻀﺔ ﺍﻟﺤﺩﻴﺜﺔ‪:‬‬


‫ﺸﺎﺭﻉ ﺸﺭﻴﻑ ـ ﻭﺴﻁ ﺍﻟﺒﻠﺩ ـ ﺍﻟﻘﺎﻫﺭﺓ‪.‬‬

‫‪ -‬ﻤﻜﺘﺒﺔ ﺍﻷﻨﺠﻠﻭ‪:‬‬
‫ﻤﻴﺩﺍﻥ ﺒﺎﺏ ﺍﻟﻠﻭﻕ ـ ﺍﻟﻘﺎﻫﺭﺓ‪.‬‬

‫‪٨‬‬
‫‪ -‬ﺍﻟﻤﻜﺘﺒﺔ ﺍﻷﻜﺎﺩﻴﻤﻴﺔ‪:‬‬
‫ﺃﻤﺎﻡ ﻤﺩﺨل ﻤﺤﻁﺔ ﻤﺘﺭﻭ ﺍﻟﺩﻗﻲ‪ ،‬ﺸﺎﺭﻉ ﺍﻟﺘﺤﺭﻴﺭ‪ ،‬ﺍﻟﺠﻴﺯﺓ‪.‬‬

‫‪ -‬ﻤﻜﺘﺒﺔ ﻤﻨﺸﺄﺓ ﺍﻟﻤﻌﺎﺭﻑ ﻭﻤﻜﺘﺒﺔ ﻋﻼﺀ ﺍﻟﺩﻴﻥ‪:‬‬


‫ﻤﺤﻁﺔ ﺍﻟﺭﻤل ـ ﺍﻹﺴﻜﻨﺩﺭﻴﺔ‪.‬‬

‫‪ -‬ﺩﺍﺭ ﺍﻟﻤﻌﺎﺭﻑ‪:‬‬
‫ﻓﺭﻭﻉ‪ :‬ﺍﻟﻔﺠﺎﻟﺔ‪ ،‬ﻭﺴﻁ ﺍﻟﺒﻠﺩ‪ ،‬ﺍﻹﺴﻜﻨﺩﺭﻴﺔ‪ ،‬ﺍﻟﺯﻗﺎﺯﻴﻕ‪ ،‬ﺠﺎﻤﻌـﺔ ﺍﻟﺯﻗـﺎﺯﻴﻕ‪ ،‬ﺍﻹﺴـﻤﺎﻋﻴﻠﻴﺔ‪،‬‬
‫ﺃﺴﻴﻭﻁ‪.‬‬

‫‪ -‬ﻤﻜﺘﺒﺔ ﺍﻟﻌﺒﻴﻜﺎﻥ‪:‬‬
‫ﺍﻟﻤﻤﻠﻜﺔ ﺍﻟﻌﺭﺒﻴﺔ ﺍﻟﺴﻌﻭﺩﻴﺔ‪.‬‬

‫‪ -‬ﻤﻜﺘﺒﺔ ﺍﻟﻬﻨﺩﺴﺔ‪:‬‬
‫ﺠﺎﺯﺍﻥ‪ ،‬ﺍﻟﻤﻤﻠﻜﺔ ﺍﻟﻌﺭﺒﻴﺔ ﺍﻟﺴﻌﻭﺩﻴﺔ‪.‬‬

‫ﻟﻼﺴﺘﻌﻼﻡ ﻋﻥ ﺃﻤﺎﻜﻥ ﺒﻴﻊ ﺍﻟﻜﺘﺏ ﻓﻲ ﺒﺎﻗﻲ ﺍﻟﻤﺤﺎﻓﻅﺎﺕ ﺍﻟﻤﺼﺭﻴﺔ‪ ،‬ﻴﻤﻜﻥ ﺍﻻﺘﺼﺎل ﺒﻤﻜﺘﺒـﺔ ﺩﺍﺭ‬
‫ﺍﻟﻤﻌﺭﻓــﺔ ﻋﻠــﻰ ﺍﻟﻬــﺎﺘﻑ ‪ ٠٢/٢٦٨٤٤٠٤٣‬ﺃﻭ ﻋﺒــﺭ ﺍﻟﺒﺭﻴــﺩ ﺍﻹﻟﻜﺘﺭﻭﻨــﻲ‪:‬‬
‫‪[email protected]‬‬

‫ﻤﺸﺭﻭﻉ ﺍﻟﺘﺭﺠﻤﺔ ﺍﻟﺠﺎﻤﻌﻴﺔ‪:‬‬


‫ﻓﻜﺭﺓ ﻋﺒﻘﺭﻴﺔ ﻟﺭﺩﻡ ﺍﻟﻔﺠﻭﺓ ﺍﻟﺤﻀﺎﺭﻴﺔ‬
‫ﻟﻤﺘﺎﺒﻌﺔ ﺘﻁﻭﺭﺍﺕ ﻫﺫﻩ ﺍﻟﻔﻜﺭﺓ‪ ،‬ﺃﺭﺠﻭ ﺯﻴﺎﺭﺓ ﻤﺩﻭﻨﺔ "ﻤﺸﺭﻭﻉ ﺍﻟﺘﺭﺠﻤﺔ ﺍﻟﺠﺎﻤﻌﻴﺔ"‪:‬‬
‫‪http://uni-trans.blogspot.com‬‬
‫ﺘﻔﺎﺼﻴل ﺍﻟﻤﺸﺭﻭﻉ ﻤﻠﺤﻘﺔ ﻓﻲ ﻨﻬﺎﻴﺔ ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ‬

‫‪٩‬‬
‫‪ ‬‬
‫‪ ‬‬
‫‪Data Repeater‬‬

‫ﺘﻤﻨﺤﻙ ﻫﺫﻩ ﺍﻷﺩﺍﺓ ﺍﻟﻘﺩﺭﺓ ﻋﻠﻰ ﻋﺭﺽ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﺼﻭﺭﺓ ﻗﺎﺌﻤﺔ ‪ List‬ﻤﻥ ﺍﻟﻌﻨﺎﺼﺭ ﺒﺎﻟﺘﻨﺴﻴﻕ‬
‫ﺍﻟﺫﻱ ﺘﺭﻴﺩﻩ‪ ..‬ﻭﺘﺨﺘﻠﻑ ﻫﺫﻩ ﺍﻷﺩﺍﺓ ﻋﻥ ﺍﻟﻘﻭﺍﺌﻡ ﺍﻟﺘﻘﻠﻴﺩﻴﺔ ﻓﻲ ﺃﻨﻬﺎ ﻻ ﺘﻌﺭﺽ ﺍﻟﻌﻨﺼﺭ ﻋﻠﻰ ﺸﻜل‬
‫ﻨﺹ ﺃﻭ ﺼﻭﺭﺓ‪ ،‬ﺒل ﺘﺘﻴﺢ ﻟﻙ ﺘﺼﻤﻴﻡ ﻜل ﻋﻨﺼﺭ ﺒﺄﻱ ﻋﺩﺩ ﻤﻥ ﺍﻷﺩﻭﺍﺕ ﻜﻤﺎ ﺘﺭﻴﺩ‪ ،‬ﻭﺒﺄﻱ ﺸﻜل‬
‫ﺘﺭﻴﺩ‪ ،‬ﻜﻤﺎ ﺘﺒﻴﻥ ﺍﻟﺼﻭﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬

‫‪١٠‬‬
‫ﻟﻭ ﺘﺄﻤﻠﺕ ﺍﻟﺼﻭﺭﺓ ﺍﻟﺴﺎﺒﻘﺔ‪ ،‬ﻓﺴﻴﺘﻀﺢ ﻟﻙ ﺃﻥ ﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﺘﻲ ﻨﺘﺤﺩﺙ ﻋﻨﻬﺎ ﺘﻌﺭﺽ ﺴﺠﻼﺕ ﺠﺩﻭل‬
‫ﺍﻟﻤﺅﻟﻔﻴﻥ‪ ،‬ﺤﻴﺙ ﻴﺘﻡ ﻋﺭﺽ ﻜل ﻤﺅﻟﻑ ﻓﻲ ‪ ٥‬ﻤﺭﺒﻌﺎﺕ ﻨﺼﻭﺹ ﻤﻊ ﻭﺠﻭﺩ ﺍﻟﻼﻓﺘﺎﺕ ﺍﻟﻼﺯﻤـﺔ‬
‫ﺍﻟﺘﻲ ﺘﺸﺭﺡ ﻭﻅﻴﻔﺔ ﻜل ﻤﺭﺒﻊ ﻨﺹ‪ ..‬ﻫﺫﺍ ﻤﻌﻨﺎﻩ ﺃﻨﻨﺎ ﺍﺴﺘﺨﺩﻤﻨﺎ ‪ ١٠‬ﺃﺩﻭﺍﺕ ﻟﺘـﺼﻤﻴﻡ ﻁﺭﻴﻘـﺔ‬
‫ﻋﺭﺽ ﻜل ﻋﻨﺼﺭ ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ‪.‬‬
‫ﻟﻜﻥ‪ ..‬ﻫل ﻨﺤﻥ ﻤﻀﻁﺭﻭﻥ ﺇﻟﻰ ﺘﺼﻤﻴﻡ ﻜل ﺍﻟﻌﻨﺎﺼﺭ ﺒﺄﻨﻔﺴﻨﺎ؟‬
‫ﺒﺎﻟﻁﺒﻊ ﻻ‪ ،‬ﻭﺇﻻ ﻜﺎﻥ ﺍﻷﻤﺭ ﻤﺴﺘﺤﻴﻼ‪ ..‬ﻓﻲ ﺍﻟﺤﻘﻴﻘﺔ ﻨﺤﻥ ﻨﺼﻤﻡ ﻋﻨﺼﺭﺍ ﻭﺍﺤﺩﺍ ﻓﻘﻁ ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ‪،‬‬
‫ﻭﻤﻥ ﺜﻡ ﻴﻌﻤل ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻜﻘﺎﻟﺏ ‪ Template‬ﺘﻨﺴﺦ ﺒﺎﻗﻲ ﺍﻟﻌﻨﺎﺼﺭ ﻤﻨﻪ‪ ..‬ﻟﻬﺫﺍ ﺘﺴﻤﻰ ﻫـﺫﻩ‬
‫ﺍﻷﺩﺍﺓ ﺒﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ‪ ،DataRepeater‬ﻭﻫﻲ ﺘﺭﺙ ﺍﻟﻔﺌﺔ ‪ ،ContainerControl‬ﻟﻬﺫﺍ ﻓﻬﻲ‬
‫ﺘﻌﻤل ﻜﺄﺩﺍﺓ ﺤﺎﻭﻴﺔ‪ ..‬ﻫﺫﺍ ﻫﻭ ﻤﺎ ﻴﺘﻴﺢ ﻟﻨﺎ ﻭﻀﻊ ﺃﺩﻭﺍﺕ ﺃﺨﺭﻯ ﻋﻠﻴﻬﺎ ﻟﺘﺼﻤﻴﻡ ﻋﻨﺎﺼﺭ ﺍﻟﻘﺎﺌﻤﺔ‪.‬‬
‫ﺩﻋﻨﺎ ﻭﻨﺭﻯ ﻜﻴﻑ ﻨﺴﺘﺨﺩﻡ ﻫﺫﻩ ﺍﻷﺩﺍﺓ ﻟﻌﺭﺽ ﺒﻴﺎﻨﺎﺕ ﺍﻟﻤﺅﻟﻔﻴﻥ‪:‬‬
‫‪ -‬ﺍﻓﺘﺢ ﻤﺸﺭﻭﻋﺎ ﺠﺩﻴﺩﺍ ﺍﺴﻤﻪ ‪) Repeater‬ﺴﺘﺠﺩﻩ ﻀﻤﻥ ﻤﺸﺎﺭﻴﻊ ﻫﺫﺍ ﺍﻟﻜﺘﺎﺏ(‪.‬‬
‫ـﺩﺍﻭل ‪Authors‬‬
‫ـﻰ ﺍﻟﺠـ‬
‫ـﻭﻱ ﻋﻠـ‬
‫ـﺸﺭﻭﻉ ﻴﺤﺘـ‬
‫ـﻰ ﺍﻟﻤـ‬
‫ـﺎﺕ ﺇﻟـ‬
‫ـﺼﺩﺭ ﺒﻴﺎﻨـ‬
‫ـﻑ ﻤـ‬
‫‪ -‬ﺃﻀـ‬
‫ﻭ ‪ Books‬ﻭ ‪.Countries‬‬
‫‪ -‬ﺍﻓﺘﺢ ﻤﺨﻁﻁ ﻤﺠﻤﻭﻋﺔ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﻭﺃﻀﻑ ﺇﻟﻰ ﺠﺩﻭل ﺍﻟﻤﺅﻟﻔﻴﻥ ﻋﻤـﻭﺩﺍ ﺠﺩﻴـﺩﺍ ﺍﺴـﻤﻪ‬
‫‪ ،Country‬ﻭﻀﻊ ﻓﻲ ﺍﻟﺨﺎﺼﻴﺔ ‪ Expression‬ﺍﻟﻨﺹ‪ ،Parent.Name :‬ﻟﺘﺠﻌل ﻫـﺫﺍ‬
‫ﺍﻟﻌﻤﻭﺩ ﻴﻌﺭﺽ ﺃﺴﻤﺎﺀ ﺍﻟﺩﻭل ﺍﻟﺘﻲ ﻴﻨﺘﻤﻲ ﺇﻟﻴﻬﺎ ﺍﻟﻤﺅﻟﻔﻭﻥ‪ ،‬ﺒﺩﻻ ﻤﻥ ﺃﻥ ﻨﻌﺭﺽ ﻟﻠﻤﺴﺘﺨﺩﻡ‬
‫ﺃﺭﻗﺎﻡ ﺍﻟﺩﻭل‪.‬‬
‫ـﺸﺭﻴﻁ‬
‫ـﺭ ﺍﻟـ‬
‫ـﺩل ﻋﻨﺎﺼـ‬
‫ـﻨﺩﻭﻕ ﺍﻷﺩﻭﺍﺕ‪ ،‬ﻭﺃﺴـ‬
‫ـﺘﺢ ﺼـ‬
‫ـﻭﺫﺝ‪ ،‬ﻭﺍﻓـ‬
‫ـﻰ ﺍﻟﻨﻤـ‬
‫ـل ﺇﻟـ‬
‫‪ -‬ﺍﻨﺘﻘـ‬
‫‪ ،Visual Basic PowerPacks‬ﻭﺍﺴﺤﺏ ﺍﻷﺩﺍﺓ ‪ DataRepeater‬ﻭﺃﺴـﻘﻁﻬﺎ ﻋﻠـﻰ‬
‫ﺍﻟﻨﻤﻭﺫﺝ‪.‬‬
‫‪ -‬ﺍﺴﺘﺨﺩﻡ ﻤﻘﺎﺒﺽ ﺍﻷﺩﺍﺓ ﻟﻤﻨﺤﻬﺎ ﺍﻟﺸﻜل ﺍﻟﻤﻼﺌﻡ‪ ..‬ﻭﻟﻭ ﺃﺭﺩﺕ ﺘﻐﻴﻴﺭ ﻤﻭﻀﻊ ﺍﻷﺩﺍﺓ ﻓﻌﻠﻴـﻙ‬
‫ﺴﺤﺒﻬﺎ ﻤﻥ ﻋﻼﻤﺔ ﺍﻷﺴﻬﻡ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻋﻠﻰ ﺍﻟﺭﻜﻥ ﺍﻟﻌﻠﻭﻱ ﺍﻷﻴﺴﺭ‪ ،‬ﻭﻫﻲ ﻻ ﺘﻅﻬﺭ ﺇﻻ ﺇﺫﺍ‬
‫ﻀﻐﻁﺕ ﺇﻁﺎﺭ ﺍﻷﺩﺍﺓ ﺒﺎﻟﻔﺄﺭﺓ‪ ،‬ﺘﻤﺎﻤﺎ ﻜﻤﺎ ﺘﻔﻌل ﻤﻊ ﺃﻱ ﺃﺩﺍﺓ ﺤﺎﻭﻴﺔ‪.‬‬
‫‪١١‬‬
‫‪ -‬ﻜﻤﺎ ﺘﻼﺤﻅ ﻓﻲ ﺍﻟﺼﻭﺭﺓ‪ ،‬ﻴﻨﻘﺴﻡ ﺴﻁﺢ ﺍﻷﺩﺍﺓ ﺇﻟﻰ ﺠﺯﺌﻴﻥ‪:‬‬
‫‪ -١‬ﻗﺎﻟﺏ ﺍﻟﻌﻨﺼﺭ ‪:Item Template‬‬
‫ﻭﻫﻭ ﺍﻟﺠﺯﺀ ﺍﻟﻌﻠﻭﻱ‪ ،‬ﺍﻟﺫﻱ ﻴﻭﺠﺩ ﺴﻬﻡ ﺃﺴﻭﺩ ﻋﻠﻰ ﻴﺴﺎﺭﻩ‪ ..‬ﻭﻟﻭ ﻀﻐﻁﺕ ﻫﺫﺍ ﺍﻟﺠﺯﺀ‬
‫ﻓﺴﻴﺘﻡ ﺘﺤﺩﻴﺩ ﺇﻁﺎﺭﻩ‪ ،‬ﻭﺴﻴﻤﻜﻨﻙ ﺘﻐﻴﻴﺭ ﺤﺠﻤﻪ ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﻘﺎﺒﺽ‪ ..‬ﻭﻴﻤﻜﻨـﻙ ﻭﻀـﻊ‬
‫ﺍﻷﺩﻭﺍﺕ ﻤﻥ ﺼﻨﺩﻭﻕ ﺍﻷﺩﻭﺍﺕ ﻓﻲ ﻫﺫﺍ ﺍﻟﺠﺯﺀ‪ ،‬ﻜﻤﺎ ﻴﻤﻜﻨﻙ ﺴﺤﺏ ﺍﻟﻌﻨﺎﺼﺭ ﻤﻥ ﻨﺎﻓﺫﺓ‬
‫ﻤﺼﺎﺩﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ‪ Data Sources‬ﻭﺇﻟﻘﺎﺌﻬﺎ ﻋﻠﻴﻪ ﻤﺒﺎﺸﺭﺓ ﻹﻨﺘـﺎﺝ ﺃﺩﻭﺍﺕ ﻤﺭﺘﺒﻁـﺔ‬
‫ﺒﺎﻟﺒﻴﺎﻨﺎﺕ‪ ..‬ﻻﺤﻅ ﺃﻥ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻴﺸﺘﺭﻁ ﻭﺠﻭﺩ ﺃﺩﺍﺓ ﻭﺍﺤﺩﺓ ﻋﻠﻰ ﺍﻷﻗل ﻤﺭﺘﺒﻁـﺔ‬
‫ﺒﺎﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﻭﻏﻴﺭ ﻫﺫﺍ‪ ،‬ﺘﺴﺘﻁﻴﻊ ﻭﻀﻊ ﺃﻴﺔ ﺃﺩﻭﺍﺕ ﺃﺨﺭﻯ ﺘﺭﻴﺩﻫﺎ‪ ،‬ﻜﻤﺭﺒـﻊ ﺼـﻭﺭﺓ‬
‫ﻴﻌﺭﺽ ﺼﻭﺭ ﺭﻤﺯﻴﺔ‪ ،‬ﺃﻭ ﺯﺭﺍ ﻴﻨﻔﺫ ﻭﻅﻴﻔﺔ ﻤﻌﻴﻨﺔ‪ ،‬ﺃﻭ ﻻﻓﺘـﺎﺕ ﺘـﺸﺭﺡ ﻭﻅـﺎﺌﻑ‬
‫ﻤﺭﺒﻌﺎﺕ ﺍﻟﻨﺼﻭﺹ‪ ..‬ﻭﻴﻘﻭﻡ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﻌﻤل ﻨﺴﺦ ﻤﻥ ﻫﺫﺍ ﺍﻟﻘﺎﻟﺏ‪ ،‬ﻟﻌﺭﺽ ﻜل‬
‫ﻋﻨﺼﺭ ﻓﻲ ﻤﺼﺩﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪.‬‬
‫‪ -٢‬ﺤﺎﻭﻴﺔ ﺍﻟﻌﺭﺽ ‪:Viewport‬‬
‫ﻫﺫﺍ ﻫﻭ ﺍﻟﺠﺯﺀ ﺍﻟﺴﻔﻠﻲ ﺍﻟﻔﺎﺭﻍ ﻤﻥ ﺍﻷﺩﺍﺓ‪ ،‬ﻭﻋﻨﺩ ﻀﻐﻁﻪ ﻴﺘﻡ ﺘﺤﺩﻴﺩ ﺍﻷﺩﺍﺓ ﻜﻠﻬﺎ‪ ..‬ﻭﻻ‬
‫ﺘﺴﺘﻁﻴﻊ ﺇﻀﺎﻓﺔ ﺃﻴﺔ ﺃﺩﻭﺍﺕ ﺇﻟﻰ ﻫﺫﺍ ﺍﻟﺠﺯﺀ‪ ،‬ﻭﻭﻅﻴﻔﺘﻪ ﺍﻟﻭﺤﻴﺩﺓ ﻫﻲ ﺘﺤﺩﻴـﺩ ﻤـﺴﺎﺤﺔ‬
‫ﻋﺭﺽ ﺍﻷﺩﺍﺓ ﻋﻠﻰ ﺍﻟﻨﻤﻭﺫﺝ‪ ..‬ﻟﻬﺫﺍ ﻴﻤﻜﻨﻙ ﺴﺤﺏ ﺤﻭﺍﻑ ﻫﺫﺍ ﺍﻟﺠﺯﺀ ﻟﻀﺒﻁ ﺍﻟﻤﺴﺎﻓﺎﺕ‬
‫ﺒﻴﻨﻬﺎ ﻭﺒﻴﻥ ﺤﻭﺍﻑ ﺍﻟﻨﻤﻭﺫﺝ‪ ..‬ﻭﻻ ﺘﻘﻠﻕ ﻤﻥ ﺼﻐﺭ ﻤﺴﺎﺤﺔ ﻤﻜـﺭﺭ ﺍﻟﺒﻴﺎﻨـﺎﺕ‪ ،‬ﻓﻬـﻭ‬
‫ﻴﻌﺭﺽ ﻤﻨﺯﻟﻘﺎ ﺭﺃﺴﻴﺎ ﺇﺫﺍ ﺍﺤﺘﺎﺝ ﺇﻟﻰ ﺫﻟﻙ‪ ،‬ﻟﻴﺴﺘﻁﻴﻊ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻋﺭﺽ ﺍﻟﻌﻨﺎﺼﺭ ﻏﻴﺭ‬
‫ﺍﻟﻅﺎﻫﺭﺓ‪ ..‬ﻭﺍﻷﻓﻀل ﺃﻥ ﺘﺴﺘﺨﺩﻡ ﺍﻟﺨﺎﺼﻴﺔ ‪ Anchor‬ﻤﻥ ﻨﺎﻓﺫﺓ ﺍﻟﺨﺼﺎﺌﺹ ﻟﺘﺜﺒﻴـﺕ‬
‫‪١٢‬‬
‫ﺤﻭﺍﻑ ﺍﻷﺩﺍﺓ ﺒﺎﻟﻨﺴﺒﺔ ﻟﺤﻭﺍﻑ ﺍﻟﻨﻤﻭﺫﺝ‪ ،‬ﺒﺤﻴﺙ ﻴﺘﻡ ﺘﻜﺒﻴﺭ ﺃﻭ ﺘﺼﻐﻴﺭ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨـﺎﺕ‬
‫ﺇﺫﺍ ﺘﻡ ﺘﻜﺒﻴﺭ ﺃﻭ ﺘﺼﻐﻴﺭ ﺍﻟﻨﻤﻭﺫﺝ‪.‬‬
‫‪ -‬ﺍﻓﺘﺢ ﻨﺎﻓﺫﺓ ﻤﺼﺎﺩﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ‪ ،Data Sources Window‬ﻭﺍﻀﻐﻁ ﺯﺭ ﺇﺴﺩﺍل ﻁﺭﻴﻘﺔ‬
‫ﺍﻟﻌﺭﺽ ﺍﻟﻤﺠﺎﻭﺭ ﻟﻠﻌﻨﺼﺭ ‪ Authors‬ﻭﺍﺨﺘﺭ ‪ Details‬ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﻤﻨﺴﺩﻟﺔ‪ ..‬ﻭﺍﺠﻌـل‬
‫ﺍﻟﺤﻘل ‪ Country‬ﻴﻌﺭﺽ ﺒﻴﺎﻨﺎﺘﻪ ﻓﻲ ﻗﺎﺌﻤﺔ ﻤﺭﻜﺒﺔ ‪ ،ComboBox‬ﺜﻡ ﺍﺴﺤﺏ ﺠـﺩﻭل‬
‫ﺍﻟﻤﺅﻟﻔﻴﻥ ﻭﺃﻟﻘ‪‬ﻪ ﻋﻠﻰ ﻗﺎﻟﺏ ﺍﻟﻌﻨﺼﺭ ﻓﻲ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ..‬ﺴـﻴﺅﺩﻱ ﻫـﺫﺍ ﺇﻟـﻰ ﺇﻀـﺎﻓﺔ‬
‫ﺍﻷﺩﻭﺍﺕ ﺍﻟﻤﻨﺎﺴﺒﺔ ﺇﻟﻰ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻭﺍﻟﻨﻤﻭﺫﺝ‪ ..‬ﺍﺤـﺫﻑ ﻤﺭﺒـﻊ ﺍﻟـﻨﺹ ﻭﺍﻟﻼﻓﺘـﺔ‬
‫ﺍﻟﻤﺭﺘﺒﻁﺘﻴﻥ ﺒﺎﻟﺤﻘل ‪ ،CountryID‬ﻭﻨﺴﻕ ﺸﻜل ﺍﻷﺩﻭﺍﺕ ﻜﻤﺎ ﺘﺭﻴﺩ‪.‬‬
‫‪ -‬ﺃﻀﻑ ﺯﺭﺍ ﺇﻟﻰ ﻗﺎﻟﺏ ﺍﻟﻌﻨﺼﺭ‪ ،‬ﻟﻨﺴﺘﺨﺩﻤﻪ ﻟﻌﺭﺽ ﻜﺘﺏ ﺍﻟﻤﺅﻟﻑ‪.‬‬
‫ﻻﺤﻅ ﺃﻥ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻴﺴﺒﺏ ﻤﺸﺎﻜل ﺇﺫﺍ ﺤﺎﻭﻟﺕ ﺘﺼﻤﻡ ﻋﻨﺼﺭ ﻴﻌﺭﺽ ﺒﻴﺎﻨﺎﺕ ﻤﺘﺭﺍﺒﻁﺔ‪..‬‬
‫ﻤﺜﻼ‪ :‬ﻟﻭ ﻋﺭﻀﺕ ﻜﺘﺏ ﺍﻟﻤﺅﻟﻑ ﺍﻟﺤﺎﻟﻲ ﻓﻲ ﺠﺩﻭل ﻋﺭﺽ‪ ،‬ﻓﺴﻴﻌﺭﺽ ﺠﺩﻭل ﺍﻟﻌﺭﺽ ﻜﺘـﺏ‬
‫ﺃﻭل ﻤﺅﻟﻑ ﻓﻲ ﺴﺠﻼﺕ ﺒﺎﻗﻲ ﺍﻟﻤﺅﻟﻔﻴﻥ!!‪ ..‬ﻭﻫﻭ ﻨﻔﺱ ﻤﺎ ﺴﻴﺤﺩﺙ ﻟﻭ ﺤﺎﻭﻟﺕ ﻋﺭﺽ ﺍﻟﻜﺘـﺏ‬
‫ﻓﻲ ﻗﺎﺌﻤﺔ ﺃﻭ ﻗﺎﺌﻤﺔ ﻤﺭﻜﺒﺔ!!‪ ..‬ﺒل ﺇﻨﻙ ﻟﻭ ﻏﻴﺭﺕ ﺍﻟﻌﻨﺼﺭ ﺍﻟﻤﺤﺩﺩ ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﻤﺭﻜﺒﺔ ﻓﻲ ﺃﺤﺩ‬
‫ﺍﻟﺴﺠﻼﺕ‪ ،‬ﻓﺴﻴﺘﻡ ﺘﻐﻴﻴﺭﻩ ﻓﻲ ﻜل ﺍﻟﻘﻭﺍﺌﻡ ﺍﻟﻤﺭﻜﺒﺔ ﺍﻟﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺒﺎﻗﻲ ﺍﻟﺴﺠﻼﺕ!!‪ ..‬ﺒﻴﻨﻤﺎ ﻟـﻭ‬
‫ﻜﺎﻨﺕ ﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﻤﺭﻜﺒﺔ ﺘﻌﺭﺽ ﻋﻨﺎﺼﺭ ﻋﺎﺩﻴﺔ )ﻤﻀﺎﻓﺔ ﺇﻟﻰ ﺍﻟﻤﺠﻤﻭﻋﺔ ‪ Items‬ﺩﻭﻥ ﺍﻻﺭﺘﺒﺎﻁ‬
‫ﺒﻤﺼﺩﺭ ﺒﻴﺎﻨﺎﺕ(‪ ،‬ﻓﺴﺘﻌﻤل ﻜل ﻨﺴﺨﺔ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ ﺒﺸﻜل ﻤﺴﺘﻘل ﻭﺼﺤﻴﺢ!‪ ..‬ﻟﻬـﺫﺍ ﻋﻠﻴﻨـﺎ ﺃﻥ‬
‫ﻨﻜﺘﺏ ﺒﻌﺽ ﺍﻟﻜﻭﺩ ﻟﻨﻤﻸ ﻗﺎﺌﻤﺔ ﺍﻟﺩﻭل‪ ..‬ﺃﻀﻑ ﻫﺫﺍ ﺍﻟﻜﻭﺩ ﺇﻟﻰ ﺤﺩﺙ ﺘﺤﻤﻴل ﺍﻟﻨﻤﻭﺫﺝ‪:‬‬
‫‪For Each R As BooksDataSet.CountriesRow In‬‬
‫‪BooksDataSet.Countries.Rows‬‬
‫)‪CountryComboBox.Items.Add(R.Name‬‬
‫‪Next‬‬
‫ﻻﺤﻅ ﺃﻨﻙ ﻟﻭ ﺃﻀﻔﺕ ﻫﺫﺍ ﺍﻟﻜﻭﺩ ﺒﻌﺩ ﻤلﺀ ﺠﺩﻭل ﺍﻟﻤﺅﻟﻔﻴﻥ ﺒﺎﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﻓﻠـﻥ ﺘﻌـﺭﺽ ﺍﻟﻘﺎﺌﻤـﺔ‬
‫ﺍﻟﻤﺭﻜﺒﺔ ﺃﻴﺔ ﻋﻨﺎﺼﺭ‪ ،‬ﺭﻏﻡ ﺃﻥ ﺍﻟﻌﻨﺎﺼﺭ ﻤﻭﺠﻭﺩﺓ ﻓﻴﻬﺎ ﻓﻌﻼ!!‬

‫‪١٣‬‬
‫ﺍﻟﺴﺒﺏ ﻓﻲ ﻫﺫﺍ ﺃﻥ ﻤلﺀ ﺠﺩﻭل ﺍﻟﻤﺅﻟﻔﻴﻥ ﺒﺎﻟﺒﻴﺎﻨﺎﺕ ﻴﺠﻌل ﺍﻷﺩﻭﺍﺕ ﺍﻟﻤﺭﺘﺒﻁﺔ ﺒﻪ ﺘﺘﻠﻘﻰ ﺍﻟﺒﻴﺎﻨﺎﺕ‬
‫ﻤﻨﻪ‪ ،‬ﻭﻫﺫﺍ ﺴﻴﺠﻌل ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻴﻌﺭﺽ ﺠﻤﻴﻊ ﺴﺠﻼﺕ ﺍﻟﻤﺅﻟﻔﻴﻥ‪ ،‬ﻭﻫﺫﺍ ﻤﻌﻨﺎﻩ ﺃﻨـﻪ ﺃﻨـﺸﺄ‬
‫ﻨﺴﺨﺎ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﻤﺭﻜﺒﺔ ﺍﻟﻔﺎﺭﻏﺔ ﻤﻥ ﺍﻟﻌﻨﺎﺼﺭ ﻭﻋﺭﻀﻬﺎ‪ ..‬ﻟﻬﺫﺍ ﻻ ﻴﻔﻴـﺩﻙ ﻤـلﺀ ﺍﻟﻘﺎﺌﻤـﺔ‬
‫ﺍﻷﺼﻠﻴﺔ ﺒﻌﺩ ﻫﺫﺍ‪ ،‬ﻓﻬﻲ ﻟﻴﺴﺕ ﻤﺭﺘﺒﻁﺔ ﻓﻌﻠﻴﺎ ﺒﺎﻟﻨﺴﺦ ﺍﻟﻤﻌﺭﻭﻀﺔ ﻟﻠﻤﺴﺘﺨﺩﻡ‪ ..‬ﻫﻲ ﻓﻘﻁ ﻤﺠـﺭﺩ‬
‫ﻗﺎﻟﺏ ‪ Template‬ﻴﺘﻡ ﻋﻤل ﻨﺴﺦ ﻤﻨﻪ‪ ..‬ﻟﻬﺫﺍ ﻴﺠﺏ ﺃﻥ ﺘﻤﻸ ﻫﺫﺍ ﺍﻟﻘﺎﻟﺏ ﺒﺎﻟﺒﻴﺎﻨﺎﺕ ﺃﻭﻻ ﻭﺘﻀﺒﻁ‬
‫ﺨﺼﺎﺌﺹ ﺸﻜﻠﻪ ﻭﻟﻭﻥ ﺨﻁﻪ ﻭﻁﺭﻴﻘﺔ ﻋﺭﻀﻪ‪ ،‬ﻗﺒل ﺃﻥ ﻴﺘﻡ ﻋﻤل ﻨﺴﺦ ﻤﻨﻪ‪ ..‬ﻫـﺫﺍ ﻤﻌﻨـﺎﻩ ﺃﻥ‬
‫ﺃﻓﻀل ﻤﻜﺎﻥ ﻟﻭﻀﻊ ﺍﻟﻜﻭﺩ ﺍﻟﺴﺎﺒﻕ ﻫﻭ ﺒﻌﺩ ﺠﻤﻠﺔ ﻤلﺀ ﺠﺩﻭل ﺍﻟﺩﻭل ﻭﻗﺒل ﺠﻤﻠﺔ ﻤلﺀ ﺠـﺩﻭل‬
‫ﺍﻟﻤﺅﻟﻔﻴﻥ!‬
‫ﻭﻫﻨﺎﻙ ﺤل ﺁﺨﺭ ﻟﻬﺫﻩ ﺍﻟﻤﺸﻜﻠﺔ‪ ،‬ﻫﻭ ﺍﺴـﺘﺨﺩﺍﻡ ﺍﻟﻭﺴـﻴﻠﺘﻴﻥ ‪ BeginResetItemTemplate‬ﻭ‬
‫‪ EndResetItemTemplate‬ﻜﻤﺎ ﺴﻨﺭﻯ ﻻﺤﻘﺎ‪.‬‬
‫ﻭﻻ ﺘﻨﺱ‪ ‬ﺃﻥ ﺘﺴﺘﺨﺩﻡ ﻨﺎﻓﺫﺓ ﺍﻟﺨﺼﺎﺌﺹ ﻟﺘﺠﻌل ﻗﺎﺌﻤﺔ ﺍﻟﺩﻭل ﺘﻌﻤل ﻜﻘﺎﺌﻤﺔ ﻤﻨﺴﺩﻟﺔ‪ ،‬ﻭﺫﻟﻙ ﺒﻭﻀﻊ‬
‫ﺍﻟﻘﻴﻤﺔ ‪ DropDownList‬ﻓﻲ ﺍﻟﺨﺎﺼﻴﺔ ‪ ..DropDownStyle‬ﻫﺫﺍ ﺴﻴﻤﻨﻊ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻤـﻥ‬
‫ﺍﻟﻜﺘﺎﺒﺔ ﻓﻲ ﻤﺭﺒﻊ ﻨﺹ ﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﻤﺭﻜﺒﺔ‪ ،‬ﺤﺘﻰ ﻻ ﻴﻜﺘﺏ ﺍﺴﻡ ﺩﻭﻟﺔ ﺨﺎﻁﺊ‪ ،‬ﻭﺒـﺩﻻ ﻤـﻥ ﻫـﺫﺍ‬
‫ﺴﻴﺨﺘﺎﺭ ﺍﻟﺩﻭﻟﺔ ﺍﻟﺘﻲ ﻴﺭﻴﺩﻫﺎ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ‪ ..‬ﻻﺤﻅ ﺃﻥ ﺍﻟﺨﺎﺼﻴﺔ ‪ Text‬ﺍﻟﺨﺎﺼﺔ ﺒﺎﻟﻘﺎﺌﻤﺔ ﺍﻟﻤﺭﻜﺒﺔ‬
‫ﻤﺭﺘﺒﻁﺔ ﺒﺎﻟﺤﻘل ‪ Author.Country‬ﺒﺴﺒﺏ ﺴﺤﺒﻬﺎ ﻤﻥ ﻨﺎﻓﺫﺓ ﻤﺼﺎﺩﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ..‬ﺴﻨﺘﺭﻙ ﻫﺫﺍ‬
‫ﻜﻤﺎ ﻫﻭ‪ ،‬ﻭﻟﻥ ﻴﺤﺩﺙ ﺨﻁﺄ‪ ،‬ﻓﻌﻨﺩﻤﺎ ﻴﻭﻀﻊ ﻓﻲ ﺍﻟﺨﺎﺼﻴﺔ ‪ Text‬ﻨﺹ ﻤﻭﺠﻭﺩ ﻓﻌﻼ ﻓﻲ ﺍﻟﻘﺎﺌﻤﺔ‪،‬‬
‫ﻓﺈﻥ ﺍﻟﻘﺎﺌﻤﺔ ﺘﺤﺩﺩ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ‪ ،‬ﻭﻫﻭ ﻤﺎ ﺴﻴﺠﻌل ﺍﻟﺒﺭﻨﺎﻤﺞ ﻴﻌﻤل ﺒﺸﻜل ﺼﺤﻴﺢ‪.‬‬
‫ﺃﻤﺎ ﺇﺫﺍ ﺃﺭﺩﺕ ﻋﺭﺽ ﻜﺘﺏ ﻜل ﻤﺅﻟﻑ‪ ،‬ﻓﺄﻓﻀل ﺤل ﻫﻭ ﺍﺴﺘﺨﺩﺍﻡ ﺯﺭ ﻴـﺅﺩﻱ ﻀـﻐﻁﻪ ﺇﻟـﻰ‬
‫ﻋﺭﺽ ﻨﻤﻭﺫﺝ ﺠﺩﻴﺩ ﻋﻠﻴﻪ ﻜﺘﺏ ﺍﻟﻤﺅﻟﻑ ﺍﻟﺤﺎﻟﻲ‪ ..‬ﻭﻋﻤﻭﻤﺎ ﻫﺫﻩ ﻫﻲ ﺍﻟﻁﺭﻴﻘﺔ ﺍﻷﻜﻔﺄ‪ ،‬ﻓﻠﻴﺱ ﻤﻥ‬
‫ﺍﻟﺫﻜﻲ ﻋﺭﺽ ﻜﻤﺎ ﻀﺨﻤﺎ ﻤﻥ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﻷﻨﻬﺎ ﺴﺘﻠﺘﻬﻡ ﻤﺴﺎﺤﺔ ﻋﺭﺽ ﻜﺒﻴﺭﺓ‬
‫ﻭﺘﺴﺘﻬﻠﻙ ﻤﺴﺎﺤﺔ ﻜﺒﻴﺭﺓ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ!‬

‫‪١٤‬‬
‫ﻟﻭ ﺸﻐﻠﺕ ﺍﻟﺒﺭﻨﺎﻤﺞ ﺍﻵﻥ‪ ،‬ﻓﺴﻴﻌﺭﺽ ﺒﻴﺎﻨﺎﺕ ﻜل ﻤﺅﻟﻔﻴﻥ ﻓﻲ ﺃﺩﻭﺍﺕ ﺍﻟﻌﺭﺽ ﺍﻟﺘﻲ ﺼﻤﻤﻨﺎﻫﺎ‪..‬‬
‫ﻭﺴﻨﺭﻯ ﻭﻨﺤﻥ ﻨﺘﻌﺭﻑ ﻋﻠﻰ ﺨﺼﺎﺌﺹ ﻭﻭﺴﺎﺌل ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻜﻴﻑ ﻨﻜﻤـل ﻭﻅـﺎﺌﻑ ﻫـﺫﺍ‬
‫ﺍﻟﺒﺭﻨﺎﻤﺞ‪.‬‬

‫ﻓﺌﺔ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ‪DataRepeater Class‬‬

‫ﻫﺫﻩ ﺍﻟﻔﺌﺔ ﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺍﻟﻨﻁﺎﻕ ‪ ،Microsoft.VisualBasic.PowerPacks‬ﻭﻫـﻲ ﺘـﺭﺙ‬


‫ﺍﻟﻔﺌﺔ ‪.ContainerControl‬‬
‫ﻭﺇﻀﺎﻓﺔ ﺇﻟﻰ ﻤﺎ ﺘﺭﺜﻪ ﻤﻥ ﺍﻟﻔﺌﺔ ﺍﻷﻡ‪ ،‬ﺘﻤﺘﻠﻙ ﻫﺫﻩ ﺍﻷﺩﺍﺓ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬

‫ﺍﻟﺴﻤﺎﺡ ﻟﻠﻤﺴﺘﺨﺩﻡ ﺒﺈﻀﺎﻓﺔ ﻋﻨﺎﺼﺭ ‪:AllowUserToAddItems‬‬


‫ﺇﺫﺍ ﺠﻌﻠﺕ ﻗﻴﻤﺘﻬﺎ ‪) True‬ﻭﻫﻲ ﺍﻟﻘﻴﻤﺔ ﺍﻻﻓﺘﺭﺍﻀﻴﺔ(‪ ،‬ﻓﺴﻴﺘﻤﻜﻥ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻤﻥ ﺇﻀﺎﻓﺔ ﺴﺠل‬
‫ﺠﺩﻴﺩ ﺇﻟﻰ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﻭﺫﻟﻙ ﺒﻀﻐﻁ ﺯﺭ ﺍﻹﻀﺎﻓﺔ ﺍﻟﻤﻭﺠﻭﺩ ﻋﻠﻰ ﺸﺭﻴﻁ ﻤﻭﺠﻪ ﺍﻟﺭﺒﻁ‪،‬‬
‫ﺃﻭ ﺒﺘﺤﺩﻴـــــﺩ ﺃﻱ ﺴـــــﺠل ﻓـــــﻲ ﻤﻜـــــﺭﺭ ﺍﻟﺒﻴﺎﻨـــــﺎﺕ‬
‫)ﺒﻀﻐﻁ ﺍﻟﻬﺎﻤﺵ ﺍﻷﻴﺴﺭ ﻟﻠﺴﺠل‪ ،‬ﺤﻴﺙ ﺴﻴﻅﻬﺭ ﻓﻴﻪ ﺴﻬﻡ ﻴﺩل ﻋﻠﻰ ﺃﻨﻪ ﻤﺤﺩﺩ(‪ ،‬ﻭﻀـﻐﻁ‬
‫‪ CTRL+N‬ﻤﻥ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ‪.‬‬
‫ﻭﻴﻌﺭﺽ ﺍﻟﺴﺠل ﺍﻟﺠﺩﻴﺩ ﺍﻟﻘﻴﻡ ﺍﻻﻓﺘﺭﺍﻀﻴﺔ ﻟﻠﺤﻘﻭل‪ ،‬ﻭﺇﺫﺍ ﻟﻡ ﺘﻜﻥ ﻟﻠﺤﻘل ﻗﻴﻤﺔ ﺍﻓﺘﺭﺍﻀـﻴﺔ‪،‬‬
‫ﻓﺴﺘﻌﺭﺽ ﺍﻷﺩﻭﺍﺕ ﻗﻴﻡ ﺃﻭل ﺃﻭ ﺁﺨﺭ ﺴﺠل ﻓﻲ ﺍﻟﺠﺩﻭل‪ ..‬ﻁﺒﻌﺎ ﻫـﺫﺍ ﻏﻴـﺭ ﻤﺭﻏـﻭﺏ‪،‬‬
‫ﻭﻋﻠﻴﻙ ﺍﻟﺘﺄﻜﺩ ﻤﻥ ﺇﻓﺭﺍﻍ ﺍﻟﺤﻘﻭل ﻤﻥ ﻫﺫﻩ ﺍﻟﻘﻴﻡ‪ ،‬ﻜﻤﺎ ﺴﻨﺭﻯ ﻻﺤﻘﺎ‪ ..‬ﻻﺤـﻅ ﺃﻥ ﺍﻟـﺴﺠل‬
‫ﺍﻟﺠﺩﻴﺩ ﻴﺘﻡ ﺤﺫﻓﻪ ﺇﺫﺍ ﻏﺎﺩﺭﻩ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺩﻭﻥ ﺃﻥ ﻴﻜﺘﺏ ﻓﻴﻪ ﺃﻴﺔ ﺒﻴﺎﻨﺎﺕ‪.‬‬

‫‪١٥‬‬
‫ﺃﻤﺎ ﺇﺫﺍ ﺠﻌﻠﺕ ﻗﻴﻤﺔ ﻫﺫﻩ ﺍﻟﺨﺎﺼﻴﺔ ‪ ،False‬ﻓﻠﻥ ﻴﻤﻜﻥ ﻟﻠﻤﺴﺘﺨﺩﻡ ﺇﻀـﺎﻓﺔ ﺴـﺠل ﺠﺩﻴـﺩ‬
‫ﺒﻀﻐﻁ ‪ CTRL+N‬ﻤﻥ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ‪ ،‬ﻟﻜﻥ ﺴﻴﻅل ﺯﺭ ﺇﻀﺎﻓﺔ ﺴﺠل ﺠﺩﻴـﺩ ﺍﻟﻤﻭﺠـﻭﺩ‬
‫ﻋﻠﻰ ﻤﻭﺠﻪ ﺍﻟﺭﺒﻁ ﻓﻌﺎﻻ‪ ،‬ﻭﺴﻴﻜﻭﻥ ﻋﻠﻴﻙ ﺘﻌﻁﻴﻠﻪ ﺒﻨﻔﺴﻙ‪.‬‬

‫ﺍﻟﺴﻤﺎﺡ ﻟﻠﻤﺴﺘﺨﺩﻡ ﺒﺤﺫﻑ ﺍﻟﻌﻨﺎﺼﺭ ‪:AllowUserToDeleteItems‬‬


‫ﺇﺫﺍ ﺠﻌﻠﺕ ﻗﻴﻤﺘﻬﺎ ‪) True‬ﻭﻫﻲ ﺍﻟﻘﻴﻤﺔ ﺍﻻﻓﺘﺭﺍﻀﻴﺔ(‪ ،‬ﻓﺴﻴﺘﻤﻜﻥ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻤﻥ ﺤﺫﻑ ﺍﻟﺴﺠل‬
‫ﺍﻟﻤﺤﺩﺩ ﺤﺎﻟﻴﺎ ﻓﻲ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﺒﻀﻐﻁ ﺯﺭ ﺍﻟﺤﺫﻑ ﺍﻟﻤﻭﺠﻭﺩ ﻋﻠﻰ ﺸﺭﻴﻁ ﻤﻭﺠﻪ ﺍﻟﺭﺒﻁ‪،‬‬
‫ﺃﻭ ﻀﻐﻁ ﺍﻟﺯﺭ ‪ DELETE‬ﻤﻥ ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ‪.‬‬

‫ﻋﺩﺩ ﺍﻟﻌﻨﺎﺼﺭ ‪:ItemCount‬‬


‫ﺘﻌﻴﺩ ﻋﺩﺩ ﺍﻟﺴﺠﻼﺕ ﺍﻟﻤﻌﺭﻭﻀﺔ ﺤﺎﻟﻴﺎ ﻓﻲ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪.‬‬
‫ﻭﻴﻤﻜﻨﻙ ﺃﻥ ﺘﻀﻊ ﻓﻲ ﻫﺫﻩ ﺍﻟﺨﺎﺼﻴﺔ ﻋﺩﺩ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﺘﻲ ﺘﺭﻴﺩ ﻋﺭﻀـﻬﺎ ﻋﻨـﺩ ﺍﺴـﺘﺨﺩﺍﻡ‬
‫ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﺍﻟﻭﻀﻊ ﺍﻻﻓﺘﺭﺍﻀﻲ ‪ Virtual Mode‬ﻜﻤﺎ ﺴـﻨﺭﻯ ﻻﺤﻘـﺎ‪ ..‬ﻟﻜـﻥ‬
‫ﻤﺤﺎﻭﻟﺔ ﻭﻀﻊ ﺃﻱ ﻗﻴﻤﺔ ﻓﻲ ﻫﺫﻩ ﺍﻟﺨﺎﺼﻴﺔ ﻓﻲ ﺍﻟﻭﻀﻊ ﺍﻟﻌﺎﺩﻱ ﺴﺘﺅﺩﻱ ﺇﻟﻰ ﺤﺩﻭﺙ ﺨﻁـﺄ‬
‫ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ‪.‬‬

‫ﻗﺎﻟﺏ ﺍﻟﻌﻨﺼﺭ ‪:ItemTemplate‬‬


‫ﺘﻌﻴﺩ ﻜﺎﺌﻨﺎ ﻤﻥ ﺍﻟﻨﻭﻉ ‪ ،DataRepeaterItem‬ﻴﻤﺜل ﺍﻟﻌﻨﺼﺭ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻜﻘﺎﻟﺏ ﻓﻲ ﻤﻜﺭﺭ‬
‫ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ..‬ﻭﺴﻨﺘﻌﺭﻑ ﻋﻠﻰ ﺍﻟﻔﺌﺔ ‪ DataRepeaterItem‬ﺒﻌﺩ ﻗﻠﻴل‪.‬‬
‫ﻭﻴﻤﻜﻨﻙ ﺍﺴﺘﺨﺩﺍﻡ ﻫﺫﻩ ﺍﻟﺨﺎﺼﻴﺔ ﻟﺘﻐﻴﻴﺭ ﺨﺼﺎﺌﺹ ﻋﻨﺎﺼﺭ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ..‬ﻻﺤﻅ ﺃﻨـﻙ‬
‫ﺘﺴﺘﻁﻴﻊ ﻓﻌل ﻫﺫﺍ ﻓﻲ ﻭﻗﺕ ﺍﻟﺘﺼﻤﻴﻡ‪ ،‬ﻭﺫﻟﻙ ﺒﻀﻐﻁ ﻗﺎﻟﺏ ﺍﻟﻌﻨﺼﺭ ﺒﺎﻟﻔﺄﺭﺓ ﻟﺘﺤﺩﻴـﺩﻩ‪ ،‬ﺜـﻡ‬
‫ﻀﻐﻁ ‪ F4‬ﻟﻌﺭﺽ ﺨﺼﺎﺌﺼﻪ ﻓﻲ ﻨﺎﻓﺫﺓ ﺍﻟﺨﺼﺎﺌﺹ‪ ..‬ﻫﺫﺍ ﻴﺘﻴﺢ ﻟﻙ ﺘﻐﻴﻴﺭ ﺍﻟﺨـﻁ ﻭﻟـﻭﻥ‬
‫ﺍﻟﺨﻠﻔﻴﺔ ﻭﺍﻟﻌﺩﻴﺩ ﻤﻥ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻷﺨﺭﻯ ﺍﻟﺘﻲ ﺘﺅﺜﺭ ﻋﻠﻰ ﺍﻟﻤﺴﺎﺤﺔ ﺍﻟﺘﻲ ﺘﻌﺭﺽ ﺍﻟﺴﺠﻼﺕ‬

‫‪١٦‬‬
‫ﻓﻲ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ..‬ﺒﻴﻨﻤﺎ ﻟﻭ ﻀﻐﻁﺕ ﺠﺯﺀ ﺍﻟﻌﺭﺽ ‪ Viewport‬ﻓﺴﺘﻅﻬﺭ ﺨـﺼﺎﺌﺹ‬
‫ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻨﻔﺴﻪ ﻓﻲ ﻨﺎﻓﺫﺓ ﺍﻟﺨﺼﺎﺌﺹ‪.‬‬

‫ﺍﻟﻌﻨﺼﺭ ﺍﻟﺤﺎﻟﻲ ‪:CurrentItem‬‬


‫ﺘﻌﻴﺩ ﻜﺎﺌﻨﺎ ﻤﻥ ﺍﻟﻨﻭﻉ ‪ ،DataRepeaterItem‬ﻴﻤﺜل ﺍﻟﻌﻨﺼﺭ ﺍﻟﻤﺤﺩﺩ ﺤﺎﻟﻴﺎ ﻓـﻲ ﻤﻜـﺭﺭ‬
‫ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ..‬ﻭﻴﻤﻜﻨﻙ ﺃﻴﻀﺎ ﺃﻥ ﺘﻀﻊ ﻓﻲ ﻫﺫﻩ ﺍﻟﺨﺎﺼﻴﺔ‪ ،‬ﻜﺎﺌﻥ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺫﻱ ﺘﺭﻴﺩ ﺘﺤﺩﻴﺩﻩ‪..‬‬
‫ﻭﻻ ﺘﻭﺠﺩ ﻁﺭﻴﻘﺔ ﺍﺘﺤﺩﻴﺩ ﺃﻜﺜﺭ ﻤﻥ ﻋﻨﺼﺭ ﻓﻲ ﻨﻔﺱ ﺍﻟﻭﻗﺕ‪.‬‬
‫ﻻﺤﻅ ﺃﻥ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻻ ﻴﻤﺘﻠﻙ ﺍﻟﺨﺎﺼﻴﺔ ﺍﻻﻓﺘﺭﺍﻀﻴﺔ ‪ ..Items‬ﺍﻟﺴﺒﺏ ﻓـﻲ ﻫـﺫﺍ ﺃﻥ‬
‫ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻫﻭ ﺃﺩﺍﺓ ﺤﺎﻭﻴﺔ‪ ،‬ﻟﻬﺫﺍ ﺘﺴﺘﻁﻴﻊ ﺃﻥ ﺘﺘﻌﺎﻤل ﻤﻊ ﻋﻨﺎﺼﺭﻩ ﻤﻥ ﺨﻼل ﺍﻟﺨﺎﺼﻴﺔ‬
‫ﺍﻟﻤﻭﺭﻭﺜﺔ ‪ ،Controls‬ﺍﻟﺘﻲ ﺘﺴﺘﻁﻴﻊ ﺃﻥ ﺘﺭﺴل ﺇﻟﻴﻬﺎ ﺭﻗﻡ ﺍﻟﻌﻨﺼﺭ ﻟﺘﻌﻴﺩ ﺇﻟﻴﻙ ﺍﻟﻜﺎﺌﻥ ﺍﻟﺫﻱ‬
‫ﻴﻤﺜﻠﻪ‪ ..‬ﻤﺜﺎل‪:‬‬
‫)‪Dim Itm As DataRepeaterItem = DataRepeater1.Controls(0‬‬
‫ﻭﺍﻟﻤﺜﺎل ﺍﻟﺘﺎﻟﻲ ﻴﺘﻴﺢ ﻟﻙ ﺍﻟﻤﺭﻭﺭ ﻋﺒﺭ ﻋﻨﺎﺼﺭ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪:‬‬
‫‪For Each Itm As DataRepeaterItem In‬‬
‫‪DataRepeater1.Controls‬‬
‫)‪Msgbox(Itm.ItemIndex‬‬
‫‪Next‬‬
‫ﻭﻻ ﺘﻨﺱ‪ ‬ﺍﺴﺘﺨﺩﺍﻡ ﺠﻤﻠﺔ ﺍﻟﺘﻀﻤﻴﻥ ﺍﻟﺘﺎﻟﻴﺔ ﺃﻋﻠﻰ ﺼﻔﺤﺔ ﺍﻟﻜﻭﺩ ﻗﺒل ﺘﺠﺭﺒﺔ ﺍﻟﻤﺜﺎل‪:‬‬
‫‪Imports Microsoft.VisualBasic.PowerPacks‬‬
‫ﻟﻜﻨﻲ ﻻ ﺃﻨﺼﺤﻙ ﺒﺎﺴﺘﺨﺩﺍﻡ ﻫﺫﻩ ﺍﻟﻁﺭﻴﻘﺔ‪ ،‬ﻷﻨﻬﺎ ﺴﺘﻤﺭ ﻋﻠﻰ ﺒﻌﺽ ﻋﻨﺎﺼﺭ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‬
‫ﻓﻘﻁ ﻭﺒﺘﺭﺘﻴﺏ ﻋﺸﻭﺍﺌﻲ!!‪ ..‬ﺍﻟﺴﺒﺏ ﻓﻲ ﻫﺫﺍ ﺃﻥ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻴﻌﺭﺽ ﻓﻘـﻁ ﺍﻟﻌﻨﺎﺼـﺭ‬
‫ﺍﻟﻅﺎﻫﺭﺓ ﻟﻠﻤﺴﺘﺨﺩﻡ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ‪ ،‬ﻭﻻ ﻴﻌﺭﺽ ﺒﺎﻗﻲ ﺍﻟﻌﻨﺎﺼﺭ ﺇﻻ ﺇﺫﺍ ﺤـﺭﻙ ﺍﻟﻤـﺴﺘﺨﺩﻡ‬
‫ﺍﻟﻤﻨﺯﻟﻕ ﺍﻟﺭﺃﺴﻲ‪ ..‬ﻟﺫﺍ ﺇﺫﺍ ﺃﺭﺩﺕ ﺇﺠﺭﺍﺀ ﺃﻱ ﺘﻐﻴﻴﺭ ﻋﻠﻰ ﺍﻟﻌﻨﺎﺼـﺭ‪ ،‬ﻓﺎﺴـﺘﺨﺩﻡ ﺍﻟﺤـﺩﺙ‬
‫‪ DrawItem‬ﻟﻔﻌل ﻫﺫﺍ‪ ،‬ﻓﻬﻭ ﻴﻨﻁﻠﻕ ﻗﺒل ﻋﺭﺽ ﻜل ﻋﻨﺼﺭ‪.‬‬

‫‪١٧‬‬
‫ﺭﻗﻡ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺤﺎﻟﻲ ‪:CurrentItemIndex‬‬
‫ﺘﻌﻴﺩ ﺭﻗﻡ ﺍﻟﺴﺠل ﺍﻟﻤﺤﺩﺩ ﺤﺎﻟﻴﺎ ﻓﻲ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ..‬ﻭﻴﻤﻜﻨﻙ ﺇﺭﺴﺎل ﺭﻗﻡ ﺃﻱ ﺴﺠل ﻟﻴـﺘﻡ‬
‫ﺘﺤﺩﻴﺩﻩ‪ ..‬ﻭﺍﻟﻤﺜﺎل ﺍﻟﺘﺎﻟﻲ ﻴﺤﺩﺩ ﺍﻟﺴﺠل ﺍﻟﺜﺎﻨﻲ ﻓﻲ ﺍﻷﺩﺍﺓ‪:‬‬
‫‪DataRepeater1.CurrentItemIndex = 1‬‬

‫ﻋﺩﺩ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﻤﻌﺭﻭﻀﺔ ‪:DisplayedItemCount‬‬


‫ﺘﻌﻴﺩ ﻋﺩﺩ ﺍﻟﺴﺠﻼﺕ ﺍﻟﻅﺎﻫﺭﺓ ﻟﻠﻤﺴﺘﺨﺩﻡ ﺤﺎﻟﻴﺎ ﻓﻲ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﺩﻭﻥ ﺘﺤﺭﻴﻙ ﺍﻟﻤﻨﺯﻟـﻕ‬
‫ﺍﻟﺭﺃﺴﻲ‪ ..‬ﻭﻟﻬﺫﻩ ﺍﻟﺨﺎﺼﻴﺔ ﻤﻌﺎﻤل ﻤﻨﻁﻘﻲ‪ ،‬ﺇﺫﺍ ﺠﻌﻠﺘﻪ ‪ True‬ﻓﺴﻴﺩﺨل ﻀـﻤﻥ ﺍﻟﺤـﺴﺎﺏ‬
‫ﺍﻟﺴﺠﻼﺕ ﺍﻟﺘﻲ ﺘﻅﻬﺭ ﺃﺠﺯﺍﺀ ﻤﻨﻬﺎ ﻓﻘﻁ‪:‬‬
‫))‪MsgBox(DataRepeater1.DisplayedItemCount(True‬‬
‫ﺃﻤﺎ ﺇﻥ ﺠﻌﻠﺘﻪ ‪ ،False‬ﻓﺴﻴﺘﻡ ﺤﺴﺎﺏ ﻋﺩﺩ ﺍﻟﺴﺠﻼﺕ ﺍﻟﻅﺎﻫﺭﺓ ﺒﺼﻭﺭﺓ ﻜﺎﻤﻠﺔ‪:‬‬
‫))‪MsgBox(DataRepeater1.DisplayedItemCount(False‬‬

‫ﺭﻗﻡ ﺃﻭل ﻋﻨﺼﺭ ﻤﻌﺭﻭﺽ ‪:FirstDisplayedItemIndex‬‬


‫ﺘﻌﻴﺩ ﺭﻗﻡ ﺃﻭ ﺴﺠل ﻅﺎﻫﺭ ﻟﻠﻤﺴﺘﺨﺩﻡ ﻓﻲ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪.‬‬

‫ﺭﺃﺱ ﺍﻟﻌﻨﺼﺭ ﻤﺭﺌﻲ ‪:ItemHeaderVisible‬‬


‫ﺇﺫﺍ ﺠﻌﻠﺕ ﻗﻴﻤﺘﻬﺎ ‪ ،False‬ﻓﺴﻴﺘﻡ ﺇﺨﻔﺎﺀ ﺍﻟﻬﺎﺵ ﺍﻷﻴﺴﺭ ﺍﻟﺫﻱ ﻴﻌﺭﺽ ﺭﺀﻭﺱ ﺍﻟﻌﻨﺎﺼـﺭ‪..‬‬
‫ﻭﺍﻟﻘﻴﻤﺔ ﺍﻻﻓﺘﺭﺍﻀﻴﺔ ‪.True‬‬

‫ﺤﺠﻡ ﺭﺃﺱ ﺍﻟﻌﻨﺼﺭ ‪:ItemHeaderSize‬‬


‫ﺘﻘﺭﺃ ﺃﻭ ﺘﻐﻴﺭ ﻋﺭﺽ ﺍﻟﻬﺎﻤﺵ ﺍﻷﻴﺴﺭ ﺍﻟﺫﻱ ﻴﻌﺭﺽ ﺭﺀﻭﺱ ﺍﻟﻌﻨﺎﺼﺭ‪.‬‬

‫ﻟﻭﻥ ﺍﻟﺘﺤﺩﻴﺩ ‪:SelectionColor‬‬


‫ﺘﻘﺭﺃ ﺃﻭ ﺘﻐﻴﺭ ﻟﻭﻥ ﺍﻟﺨﻠﻔﻴﺔ ﺍﻟﺫﻱ ﻴﻌﺭﺽ ﻓﻲ ﺨﺎﻨﺔ ﺭﺃﺱ ﺍﻟﺴﺠل ﺍﻟﻤﺤﺩﺩ ﺤﺎﻟﻴﺎ‪.‬‬

‫‪١٨‬‬
‫ﻁﺭﺍﺯ ﺍﻟﻤﺨﻁﻁ ‪:LayoutStyle‬‬
‫ﺘﻘﺭﺃ ﺃﻭ ﺘﻐﻴﺭ ﻁﺭﻴﻘﺔ ﻋﺭﺽ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨـﺎﺕ‪ ،‬ﻭﻫـﻲ ﺘﺄﺨـﺫ ﺇﺤـﺩﻯ ﻗﻴﻤﺘـﻲ ﺍﻟﻤـﺭﻗﻡ‬
‫‪ DataRepeaterLayoutStyles‬ﺍﻟﺘﺎﻟﻴﺘﻴﻥ‪:‬‬

‫ﻴﺘﻡ ﺘﻜﺭﺍﺭ ﺍﻟﻌﻨﺎﺼﺭ ﺭﺃﺴﻴﺎ )ﻤﻥ ﺃﻋﻠﻰ ﺇﻟﻰ ﺃﺴﻔل( ﻓﻲ ﺸﻜل ﺼـﻔﻭﻑ‪..‬‬ ‫‪Vertical‬‬
‫ﻫﺫﺍ ﻫﻭ ﺍﻟﻭﻀﻊ ﺍﻻﻓﺘﺭﺍﻀﻲ‪.‬‬
‫‪ Horizontal‬ﻴﺘﻡ ﺘﻜﺭﺍﺭ ﺍﻟﻌﻨﺎﺼﺭ ﺃﻓﻘﻴﺎ )ﻤﻥ ﺍﻟﻴﺴﺎﺭ ﺇﻟﻰ ﺍﻟﻴﻤﻴﻥ( ﻓﻲ ﺸـﻜل ﺃﻋﻤـﺩﺓ‪،‬‬
‫ﻭﻴﻅﻬﺭ ﻫﺎﻤﺵ ﻋﻠﻭﻱ ﻴﺤﻤل ﺭﺀﻭﺱ ﻫﺫﻩ ﺍﻷﻋﻤﺩﺓ‪ ..‬ﻭﻴﻤﻜﻨﻙ ﺭﺅﻴﺔ ﻫﺫﺍ‬
‫ﻓﻲ ﺍﻟﻤﺸﺭﻭﻉ ‪.RepeaterItemColor‬‬

‫ﻭﺘﻤﺘﻠﻙ ﻫﺫﻩ ﺍﻷﺩﺍﺓ ﺍﻟﻭﺴﺎﺌل ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬

‫ﺇﻀﺎﻓﺔ ﺠﺩﻴﺩ ‪:AddNew‬‬


‫ﺘﻀﻴﻑ ﺴﺠﻼ ﺇﻟﻰ ﻨﻬﺎﻴﺔ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ..‬ﻭﺘﺴﺒﺏ ﻫﺫﻩ ﺍﻟﻭﺴﻴﻠﺔ ﺨﻁﺄ ﺇﺫﺍ ﻜﺎﻨﺕ ﻟﻠﺨﺎﺼـﻴﺔ‬
‫‪ AllowUserToAddItems‬ﺍﻟﻘﻴﻤﺔ ‪.False‬‬

‫ﺤﺫﻑ ﻤﻥ ﻤﻭﻀﻊ ‪:RemoveAt‬‬


‫ﺃﺭﺴل ﺇﻟﻰ ﻫﺫﻩ ﺍﻟﻭﺴﻴﻠﺔ ﺭﻗﻡ ﺍﻟﺴﺠل ﺍﻟﺫﻱ ﺘﺭﻴﺩ ﺤﺫﻓﻪ ﻤﻥ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪.‬‬

‫ﺇﻟﻐﺎﺀ ﺍﻟﺘﺤﺭﻴﺭ ‪:CancelEdit‬‬


‫ﺘﻠﻐﻲ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻟﺘﻲ ﺃﺩﺨﻠﻬﺎ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻓﻲ ﺍﻟﺴﺠل ﺍﻟﺤﺎﻟﻲ‪ ،‬ﻭﺘﻌﻴﺩ ﻭﻀﻊ ﺍﻟﻘﻴﻡ ﺍﻷﺼﻠﻴﺔ ﻓـﻲ‬
‫ﺍﻷﺩﻭﺍﺕ‪ ..‬ﻫﺫﺍ ﻤﻔﻴﺩ ﺇﺫﺍ ﺃﺭﺩﺕ ﺃﻥ ﺘﻤﻨﺢ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺍﻟﻘﺩﺭﺓ ﻋﻠﻰ ﻀﻐﻁ ﺍﻟـﺯﺭ ‪ Esc‬ﻤـﻥ‬
‫ﻟﻭﺤﺔ ﺍﻟﻤﻔﺎﺘﻴﺢ ﻹﻟﻐﺎﺀ ﺍﻟﺘﻐﻴﻴﺭﺍﺕ ﺍﻟﺘﻲ ﺃﺠﺭﺍﻫﺎ ﻓﻲ ﺍﻟﺴﺠل ﺍﻟﺤﺎﻟﻲ‪ ..‬ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﻋﻠﻴـﻙ‬
‫ﺃﻥ ﺘﻜﺘﺏ ﺇﺠﺭﺍﺀ ﻴﺴﺘﺠﻴﺏ ﻟﻠﺤﺩﺙ ‪ KeyDown‬ﻟﺠﻤﻴﻊ ﺍﻷﺩﻭﺍﺕ ﺍﻟﺘﻲ ﺘﻌـﺭﺽ ﺒﻴﺎﻨـﺎﺕ‬
‫‪١٩‬‬
‫ﺍﻟﺴﺠل‪ ،‬ﻭﺘﻜﺏ ﻓﻴﻪ ﺍﻟﻜﻭﺩ ﺍﻟﺫﻱ ﻴﺴﺘﺩﻋﻲ ﻫﺫﻩ ﺍﻟﻭﺴﻴﻠﺔ ﺇﻥ ﻜﺎﻥ ﺍﻟﺯﺭ ﺍﻟﻤﻀﻐﻭﻁ ﻫﻭ ﺍﻟـﺯﺭ‬
‫‪ ..Esc‬ﻭﺴﺘﺠﺩ ﺍﻟﻜﻭﺩ ﺍﻟﺘـﺎﻟﻲ ﻓـﻲ ﺍﻹﺠـﺭﺍﺀ ‪ UserCancelsEdit‬ﻓـﻲ ﺍﻟﻤـﺸﺭﻭﻉ‬
‫‪ ،Repaeter‬ﻤﻊ ﻤﻼﺤﻅﺔ ﺃﻥ ﻫﺫﺍ ﺍﻹﺠﺭﺍﺀ ﻴﺴﺘﺠﻴﺏ ﻟﻠﺤﺩﺙ ‪ KeyDown‬ﻟﻜل ﻤﺭﺒﻌـﺎﺕ‬
‫ﺍﻟﻨﺹ ﻭﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﻤﺭﻜﺒﺔ ﺃﻴﻀﺎ‪:‬‬
‫‪If e.KeyCode = Keys.Escape Then‬‬
‫) (‪DataRepeater1.CancelEdit‬‬
‫‪End If‬‬
‫ﻻﺤﻅ ﺃﻥ ﺍﻟﺘﻐﻴﻴﺭﺍﺕ ﺍﻟﺘﻲ ﻴﺩﺨﻠﻬﺎ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻓﻲ ﺃﻱ ﺃﺩﺍﺓ ﻓﻲ ﺍﻟﺴﺠل ﺍﻟﺤﺎﻟﻲ‪ ،‬ﻴـﺘﻡ ﻗﺒﻭﻟﻬـﺎ‬
‫ﺒﻤﺠﺭﺩ ﻤﻐﺎﺩﺭﺓ ﺍﻷﺩﺍﺓ ﺇﻟﻰ ﺃﻴﺔ ﺃﺩﺍﺓ ﺃﺨﺭﻯ‪ ،‬ﻓﻲ ﻨﻔﺱ ﺍﻟﺴﺠل ﺃﻭ ﻓﻲ ﺴﺠل ﺁﺨﺭ‪ ..‬ﻫﺫﺍ ﻤﻌﻨﺎﻩ‬
‫ﺃﻥ ﻀﻐﻁ ﺍﻟﺯﺭ ‪ ESC‬ﺴﻴﻠﻐﻲ ﺍﻟﺘﻐﻴﻴﺭﺍﺕ ﺍﻟﺘﻲ ﺤﺩﺜﺕ ﻓﻲ ﺍﻷﺩﺍﺓ ﺍﻟﺤﺎﻟﻴﺔ ﻓﻘﻁ ﻭﻟﻥ ﻴـﺅﺜﺭ‬
‫ﻋﻠﻰ ﺃﻴﺔ ﺃﺩﺍﺓ ﺃﺨﺭﻯ‪ ..‬ﻭﻟﻭ ﻏﺎﺩﺭ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺍﻷﺩﺍﺓ ﺍﻟﺘﻲ ﺃﺠﺭﻯ ﻓﻴﻬﺎ ﺍﻟﺘﻐﻴﻴﺭﺍﺕ‪ ،‬ﺜﻡ ﻋـﺎﺩ‬
‫ﺇﻟﻴﻬﺎ ﻭﻀﻐﻁ ‪ ESC‬ﻓﻠﻥ ﻴﺤﺩﺙ ﺸﻲﺀ!‬

‫ﺘﺤﺭﻴﻙ ﺍﻟﻌﻨﺼﺭ ﺇﻟﻰ ﻤﺠﺎل ﺍﻟﺭﺅﻴﺔ ‪:ScrollItemIntoView‬‬


‫ﺃﺭﺴل ﺇﻟﻰ ﻫﺫﻩ ﺍﻟﻭﺴﻴﻠﺔ ﺭﻗﻡ ﺍﻟﺴﺠل ﺍﻟﺫﻱ ﺘﺭﻴﺩ ﺘﺤﺭﻴﻙ ﺍﻟﻤﻨﺯﻟﻕ ﺇﻟﻴـﻪ ﻟﻴـﺼﻴﺭ ﻤﺭﺌﻴـﺎ‬
‫ﻟﻠﻤﺴﺘﺨﺩﻡ‪.‬‬
‫ﻭﺘﻭﺠﺩ ﺼﻴﻐﺔ ﺃﺨﺭﻯ‪ ،‬ﺘﺴﺘﻘﺒل ﻤﻌﺎﻤﻼ ﺜﺎﻨﻴﺎ‪ ،‬ﺇﺫﺍ ﺠﻌﻠﺘﻪ ‪ ،True‬ﻓﺴﻴﺘﻡ ﺘﺤﺭﻴـﻙ ﺍﻟﻤﻨﺯﻟـﻕ‬
‫ﺒﺤﻴﺙ ﻴﺼﻴﺭ ﺍﻟﺴﺠل ﻫﻭ ﺃﻭل ﺴﺠل ﻤﻌﺭﻭﺽ ﻓﻲ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﻤﻊ ﻤﺤـﺎﺫﺍﺓ ﺍﻟﺤﺎﻓـﺔ‬
‫ﺍﻟﻌﻠﻭﻴﺔ ﻟﻠﺴﺠل ﺒﺎﻟﺤﺎﻓﺔ ﺍﻟﻌﻠﻭﻴﺔ ﻟﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪.‬‬

‫ﺒﺩﺀ ﺘﻐﻴﻴﺭ ﻗﺎﻟﺏ ﺍﻟﻌﻨﺼﺭ ‪:BeginResetItemTemplate‬‬


‫ﻜﻤﺎ ﺃﺸﺭﻨﺎ ﻤﻥ ﻗﺒل‪ :‬ﺃﻱ ﺘﻐﻴﻴﺭ ﺘﺠﺭﻴﻪ ﻋﻠﻰ ﺨﺼﺎﺌﺹ ﺍﻷﺩﻭﺍﺕ ﺍﻟﺩﺍﺨﻠﺔ ﻓﻲ ﺘﻜﻭﻴﻥ ﻗﺎﻟـﺏ‬
‫ﺍﻟﻌﻨﺼﺭ ﺒﻌﺩ ﻋﺭﺽ ﻋﻨﺎﺼﺭ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻴﻜﻭﻥ ﺒﻼ ﺘﺄﺜﻴﺭ‪ ..‬ﻟﻬﺫﺍ ﻟـﻭ ﺃﺭﺩﺕ ﺘﻐﻴﻴـﺭ‬
‫ﺨﺼﺎﺌﺹ ﺃﻴﺔ ﺃﺩﺍﺓ‪ ،‬ﺃﻭ ﺃﺭﺩﺕ ﺇﺠﺭﺍﺀ ﺘﻌﺩﻴﻼﺕ ﻋﻠﻰ ﺍﻟﻘﺎﻟﺏ ﻨﻔﺴﻪ ﺒﺈﻀﺎﻓﺔ ﺃﻭ ﺤﺫﻑ ﺃﺩﻭﺍﺕ‬
‫‪٢٠‬‬
‫ﻤــﻥ ﺨــﻼل ﺍﻟﺨﺎﺼــﻴﺔ ‪ ،ItemTemplate‬ﻓﻌﻠﻴــﻙ ﺃﻭﻻ ﺃﻥ ﺘــﺴﺘﺩﻋﻲ ﺍﻟﻭﺴــﻴﻠﺔ‬
‫‪ BeginResetItemTemplate‬ﻟﺘﻨﺒﻴﻪ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺇﻟﻰ ﺃﻥ ﻫﻨﺎﻙ ﺘﻐﻴﻴﺭﺍﺕ ﺴـﺘﺤﺩﺙ‬
‫ﻓﻲ ﻁﺭﻴﻘﺔ ﺍﻟﻌﺭﺽ‪.‬‬

‫ﺇﻨﻬﺎﺀ ﺘﻐﻴﻴﺭ ﻗﺎﻟﺏ ﺍﻟﻌﻨﺼﺭ ‪:EndResetItemTemplate‬‬


‫ﺍﺴﺘﺩﻉ ﻫﺫﻩ ﺍﻟﻭﺴﻴﻠﺔ ﻓﻲ ﻨﻬﺎﻴﺔ ﺍﻟﻜﻭﺩ ﺍﻟﺫﻱ ﻴﺠﺭﻱ ﺘﻌﺩﻴﻼﺕ ﻓﻲ ﻗﺎﻟﺏ ﺍﻟﻌﻨـﺼﺭ‪ ،‬ﻹﺠﺒـﺎﺭ‬
‫ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻋﻠﻰ ﺇﻨﻌﺎﺵ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﺘﻲ ﻴﻌﺭﻀﻬﺎ ﻟﺘﻅﻬـﺭ ﻋﻠﻴﻬـﺎ ﺍﻟﺘﻐﻴﻴـﺭﺍﺕ ﺍﻟﺘـﻲ‬
‫ﺤﺩﺜﺕ‪ ..‬ﻭﺍﻟﻜﻭﺩ ﺍﻟﺘﺎﻟﻲ ﻴﻐﻴﺭ ﻟﻭﻥ ﺨﻠﻔﻴﺔ ﺍﻟﻘﺎﺌﻤﺔ ﺇﻟﻰ ﺍﻷﺼﻔﺭ‪ ،‬ﻭﻴﻤﻜﻨﻙ ﺘﺠﺭﺒﺘـﻪ ﺒـﻀﻐﻁ‬
‫ﺍﻟﺯﺭ "ﺘﻐﻴﺭ ﻟﻭﻥ ﺍﻟﺨﻠﻔﻴﺔ" ﻓﻲ ﺍﻟﻤﺸﺭﻭﻉ ‪:Repeater‬‬
‫) (‪DataRepeater1.BeginResetItemTemplate‬‬
‫‪CountryComboBox.BackColor = Color.Yellow‬‬
‫) (‪DataRepeater1.EndResetItemTemplate‬‬
‫ﺠﺭﺏ ﻭﻀﻊ ﻋﻼﻤﺔ ﺍﻟﺘﻌﻠﻴﻕ ' ﺃﻤﺎﻡ ﺍﻟﺴﻁﺭﻴﻥ ﺍﻷﻭل ﻭﺍﻷﺨﻴﺭ ﻓﻲ ﺍﻟﻜﻭﺩ ﺍﻟﺴﺎﺒﻕ ﻭﺍﻀـﻐﻁ‬
‫ﺍﻟﺯﺭ‪ ..‬ﺴﺘﺠﺩ ﺃﻥ ﻟﻭﻥ ﺍﻟﻘﺎﺌﻤﺔ ﻟﻥ ﻴﺘﻐﻴﺭ‪.‬‬

‫ﻜﻤﺎ ﺘﻤﺘﻠﻙ ﻫﺫﻩ ﺍﻟﻔﺌﺔ ﺍﻷﺤﺩﺍﺙ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬

‫ﺘﻐﻴﺭ ﺭﻗﻡ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺤﺎﻟﻲ ‪:CurrentItemIndexChanged‬‬


‫ﻴﻨﻁﻠﻕ ﻋﻨﺩﻤﺎ ﺘﺘﻐﻴﺭ ﻗﻴﻤﺔ ﺍﻟﺨﺎﺼﻴﺔ ‪ CurrentItemIndex‬ﻤﻥ ﺍﻟﻜﻭﺩ‪ ،‬ﺃﻭ ﺒﺴﺒﺏ ﺍﻨﺘﻘـﺎل‬
‫ﺍﻟﻤﺴﺘﺨﺩﻡ ﻤﻥ ﺴﺠل ﺇﻟﻰ ﺁﺨﺭ ﻓﻲ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪.‬‬

‫ﺨﻁﺄ ﺍﻟﺒﻴﺎﻨﺎﺕ ‪:DataError‬‬


‫ﻴﻨﻁﻠﻕ ﻋﻨﺩ ﺤﺩﻭﺙ ﺨﻁﺄ ﻓﻲ ﻗﺭﺍﺀﺓ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻤﻥ ﻤﺼﺩﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﺃﻭ ﻓﻲ ﻨﻘـل ﺍﻟﺒﻴﺎﻨـﺎﺕ‬
‫ﺍﻟﻤﺤﺩﺜﺔ ﻤﻥ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺇﻟﻴﻪ‪ ..‬ﻭﺍﻟﻤﻌﺎﻤـل ﺍﻟﺜـﺎﻨﻲ ‪ e‬ﻟﻬـﺫﺍ ﺍﻟﺤـﺩﺙ ﻤـﻥ ﺍﻟﻨـﻭﻉ‬
‫‪ ،DataRepeaterDataErrorEventArgs‬ﻭﻟﻪ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬
‫‪٢١‬‬
‫‪ DataRepeater‬ﺘﻌﻴﺩ ﻋﻨﺼﺭ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ‪ DataRepeaterItem‬ﺍﻟـﺫﻱ‬
‫‪Item‬‬
‫ﻴﻤﺜل ﺍﻟﺴﺠل ﺍﻟﺫﻱ ﺤﺩﺙ ﻓﻴﻪ ﺍﻟﺨﻁﺄ‪.‬‬
‫ﺘﻌﻴﺩ ﺍﻷﺩﺍﺓ ﺍﻟﺘﻲ ﺤﺩﺙ ﻓﻴﻬﺎ ﺍﻟﺨﻁﺄ‪.‬‬ ‫‪Control‬‬
‫‪ PropertyNam‬ﺘﻌﻴﺩ ﺍﺴﻡ ﺨﺎﺼﻴﺔ ﺍﻷﺩﺍﺓ‪ ،‬ﺍﻟﺘﻲ ﺴﺒﺒﺕ ﺍﻟﺨﻁﺄ‪ ..‬ﺒﻤﻌﻨﻰ ﺁﺨﺭ‪:‬‬
‫‪e‬‬
‫ﺘﻌﻴﺩ ﻋﻨﺼﺭ ﺍﻟﻌﺭﺽ‪.‬‬
‫‪ Exception‬ﺘﻌﻴﺩ ﻜﺎﺌﻥ ﺍﻻﺴﺘﺜﻨﺎﺀ ‪ Exception‬ﺍﻟﺫﻱ ﻴﺤﻤـل ﻤﻌﻠﻭﻤـﺎﺕ‬
‫ﺍﻟﺨﻁﺄ‪.‬‬
‫‪ ThrowExcepti‬ﺇﺫﺍ ﺠﻌﻠﺕ ﻗﻴﻤﺔ ﻫﺫﻩ ﺍﻟﺨﺎﺼﻴﺔ ‪ ،True‬ﻓﺴﻴﺤﺩﺙ ﺍﻟﺨﻁﺄ ﻓـﻲ‬
‫‪on‬‬
‫ﺍﻟﺒﺭﻨﺎﻤﺞ ﺒﻌﺩ ﺍﻨﺘﻬﺎﺀ ﻫﺫﺍ ﺍﻟﺤﺩﺙ‪ ..‬ﻭﺍﻟﻘﻴﻤﺔ ﺍﻻﻓﺘﺭﺍﻀﻴﺔ ﻫـﻲ‬
‫‪.False‬‬

‫ﺃﻀﺎﻑ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻋﻨﺎﺼﺭ ‪:UserAddedItems‬‬


‫ﻴﻨﻁﻠﻕ ﺒﻌﺩ ﺃﻥ ﻴﻀﻐﻁ ﺍﻟﻤﺴﺘﺨﺩﻡ ‪ ،CTRL+N‬ﻭﻗﺒل ﺃﻥ ﻴﻀﺎﻑ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺠﺩﻴـﺩ ﺇﻟـﻰ‬
‫ﻤﻜــﺭﺭ ﺍﻟﺒﻴﺎﻨــﺎﺕ‪ ..‬ﻭﺍﻟﻤﻌﺎﻤــل ﺍﻟﺜــﺎﻨﻲ ‪ e‬ﻟﻬــﺫﺍ ﺍﻟﺤــﺩﺙ ﻤــﻥ ﺍﻟﻨــﻭﻉ‬
‫‪ ،DataRepeaterAddRemoveItemsEventArgs‬ﻭﻟﻪ ﺍﻟﺨﺎﺼﻴﺘﺎﻥ ﺍﻟﺘﺎﻟﻴﺘﺎﻥ‪:‬‬

‫‪ ItemIndex‬ﺘﻌﻴﺩ ﺭﻗﻡ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺠﺩﻴﺩ‪.‬‬


‫‪ ItemCount‬ﺘﻌﻴﺩ ﻋﺩﺩ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﺘﻲ ﺘﻤﺕ ﺇﻀﺎﻓﺘﻬﺎ‪.‬‬

‫ﻭﻴﻌﺘﺒﺭ ﻫﺫﺍ ﺍﻟﺤﺩﺙ ﺃﻨﺴﺏ ﻤﻜﺎﻥ ﻹﻓﺭﺍﻍ ﺨﺎﻨﺎﺕ ﺍﻟﺴﺠل ﻤﻥ ﺃﻴﺔ ﻗﻴﻡ ﻏﻴﺭ ﻤﺭﻏﻭﺒﺔ‪ ،‬ﻓﻜﻤـﺎ‬
‫ﺫﻜﺭﻨﺎ ﺴﺎﺒﻘﺎ‪ ،‬ﻴﻌﺭﺽ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻗﻴﻡ ﺍﻟﺴﺠل ﺍﻷﻭل ﺃﻭ ﺍﻷﺨﻴﺭ ﻓﻲ ﺍﻟﺴﺠل ﺍﻟﺠﺩﻴﺩ‪ ،‬ﻟﻬﺫﺍ‬
‫ﻴﻤﻜﻨﻙ ﺃﻥ ﺘﻤﺤﻭﻫﺎ‪ ،‬ﺃﻭ ﺘﻀﻊ ﺒﺩﻻ ﻤﻨﻬﺎ ﺍﻟﻘﻴﻡ ﺍﻻﺒﺘﺩﺍﺌﻴﺔ ﺍﻟﻤﻨﺎﺴﺒﺔ‪ ..‬ﻭﻗـﺩ ﺍﺴـﺘﺨﺩﻤﻨﺎ ﻫـﺫﺍ‬
‫ﺍﻟﺤﺩﺙ ﻟﻔﻌل ﻫﺫﺍ ﻓﻲ ﺍﻟﻤﺸﺭﻭﻋﻴﻥ ‪ Repeater‬ﻭ ‪.RepeaterItemColor‬‬
‫‪٢٢‬‬
‫ﻴﺠﺭﻱ ﺤﺫﻑ ﻋﻨﺎﺼﺭ ‪:DeletingItems‬‬
‫ﻴﻨﻁﻠﻕ ﻋﻨﺩ ﺤﺫﻑ ﺴﺠل ﻤﻥ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﺴﻭﺍﺀ ﻤﻥ ﺍﻟﻜﻭﺩ ﺃﻭ ﺒﻭﺍﺴـﻁﺔ ﺍﻟﻤـﺴﺘﺨﺩﻡ‪..‬‬
‫ﻭﺍﻟﻤﻌﺎﻤــــل ﺍﻟﺜــــﺎﻨﻲ ‪ e‬ﻟﻬــــﺫﺍ ﺍﻟﺤــــﺩﺙ ﻤــــﻥ ﺍﻟﻨــــﻭﻉ‬
‫‪ ،DataRepeaterAddRemoveItemsCancelEventArgs‬ﻭﻫﻭ ﻤﻤﺎﺜل ﻟﻤﻌﺎﻤـل‬
‫ﺍﻟﺤﺩﺙ ﺍﻟﺴﺎﺒﻕ‪ ،‬ﺇﻻ ﺃﻨﻪ ﻴﺯﻴﺩ ﻋﻨﻪ ﺒﺎﻤﺘﻼﻙ ﺍﻟﺨﺎﺼﻴﺔ ‪ ،Cancel‬ﻭﺇﺫﺍ ﻭﻀﻌﺕ ﻓﻴﻬﺎ ‪True‬‬
‫ﻴﺘﻡ ﺇﻟﻐﺎﺀ ﺤﺫﻑ ﺍﻟﺴﺠل‪ ..‬ﻟﻬﺫﺍ ﻴﻌﺘﺒﺭ ﻫﺫﺍ ﺍﻟﺤﺩﺙ ﻤﻼﺌﻤﺎ ﻟﺘﻌﺭﺽ ﺭﺴﺎﻟﺔ ﻟﻠﻤﺴﺘﺨﺩﻡ ﻟﻴﺅﻜﺩ‬
‫ﺭﻏﺒﺘﻪ ﻓﻲ ﺤﺫﻑ ﺍﻟﺴﺠل‪:‬‬
‫‪",‬ﻫل ﺘﺭﻴﺩ ﺤﺫﻑ ﻫﺫﺍ ﺍﻟﺴﺠل ﻓﻌﻼ؟"(‪If MsgBox‬‬
‫‪MsgBoxStyle.OkCancel) = MsgBoxResult.Cancel Then‬‬
‫‪e.Cancel = True‬‬
‫‪End If‬‬
‫ﻻﺤﻅ ﺃﻨﻙ ﻀﻐﻁ ﺯﺭ ﺍﻟﺤﺫﻑ ﺍﻟﻤﻭﺠﻭﺩ ﻋﻠﻰ ﺸﺭﻴﻁ ﻤﻭﺠﻪ ﺍﻟﺭﺒﻁ ﺴﻴﺤﺫﻑ ﺍﻟﻌﻨﺼﺭ ﻤـﻥ‬
‫ﻤﺼﺩﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻤﺒﺎﺸﺭﺓ‪ ،‬ﻭﻟﻥ ﺘﻅﻬﺭ ﺭﺴﺎﻟﺔ ﺍﻟﺘﺤﺫﻴﺭ‪ ..‬ﻟﻭ ﺃﺭﺩﺕ ﺘﻐﻴﻴﺭ ﻫﺫﺍ ﺍﻷﺩﺍﺀ‪ ،‬ﻓﻀﻊ‬
‫ﻓﻲ ﺍﻟﺨﺎﺼﻴﺔ ‪ DeleteItem‬ﺍﻟﺨﺎﺼﺔ ﺒﻤﻭﺠﻪ ﺍﻟﺭﺒﻁ ﺍﻟﻘﻴﻤﺔ ‪ ،Nothing‬ﻭﺍﻜﺘﺏ ﻤﺎ ﻴﻠـﻲ‬
‫ﻓﻲ ﺤﺩﺙ ﻀﻐﻁ ﺯﺭ ﺍﻟﺤﺫﻑ‪:‬‬
‫‪Dim I = DataRepeater1.CurrentItem.ItemIndex‬‬
‫)‪DataRepeater1.RemoveAt(I‬‬
‫ﻭﺴﺘﺠﺩ ﻫﺫﺍ ﺍﻟﻜﻭﺩ ﻓﻲ ﺍﻟﻤﺸﺭﻭﻉ ‪.Repeater‬‬

‫ﺍﻟﻤﺴﺘﺨﺩﻡ ﻴﺤﺫﻑ ﻋﻨﺎﺼﺭ ‪:UserDeletingItems‬‬


‫ﻤﻤﺎﺜل ﻟﻠﺤﺩﺙ ﺍﻟﺴﺎﺒﻕ ﻓﻲ ﻜل ﺸﻲﺀ‪ ،‬ﻤﺎ ﻋﺩﺍ ﺃﻨﻪ ﻴﻨﻁﻠﻕ ﻓﻘﻁ ﻋﻨﺩﻤﺎ ﻴﻀﻐﻁ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺍﻟﺯﺭ‬
‫‪ Delete‬ﻟﺤﺫﻑ ﺍﻟﺴﺠل ﺍﻟﻤﺤﺩﺩ ﻓﻲ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﻭﻻ ﻴﻨﻁﻠﻕ ﺒﺴﺒﺏ ﺤﺫﻑ ﺍﻟﺴﺠل ﻤﻥ‬
‫ﺍﻟﻜﻭﺩ‪.‬‬

‫‪٢٣‬‬
‫ﺍﻟﻤﺴﺘﺨﺩﻡ ﺤﺫﻑ ﻋﻨﺎﺼﺭ ‪:UserDeletedItems‬‬
‫ﻴﻨﻁﻠﻕ ﺒﻌﺩ ﺃﻥ ﻴﺤﺫﻑ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺴﺠﻼ ﻤﻥ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﻭﻻ ﻴﻨﻁﻠـﻕ ﺒـﺴﺒﺏ ﺤـﺫﻑ‬
‫ﺍﻟــﺴﺠل ﻤــﻥ ﺍﻟﻜــﻭﺩ‪ ..‬ﻭﺍﻟﻤﻌﺎﻤــل ﺍﻟﺜــﺎﻨﻲ ‪ e‬ﻟﻬــﺫﺍ ﺍﻟﺤــﺩﺙ ﻤــﻥ ﺍﻟﻨــﻭﻉ‬
‫‪ ،DataRepeaterAddRemoveItemsEventArgs‬ﻭﻗﺩ ﺴﺒﻕ ﺃﻥ ﺘﻌﺭﻓﻨﺎ ﻋﻠﻴﻪ‪ ..‬ﻫﺫﺍ‬
‫ﻤﻌﻨﺎﻩ ﺃﻨﻙ ﻻ ﺘﺴﺘﻁﻴﻊ ﺍﺴﺘﻌﺎﺩﺓ ﺍﻟﺴﺠل ﺒﻌﺩ ﺤﺫﻓﻪ‪ ،‬ﻓﻬـﺫﺍ ﺍﻟﺤـﺩﺙ ﻻ ﻴﻤﻠـﻙ ﺍﻟﺨﺎﺼـﻴﺔ‬
‫‪.e.Cancel‬‬

‫ﻴﺠﺭﻱ ﻨﺴﺦ ﺍﻟﻌﻨﺼﺭ ‪:ItemCloning‬‬


‫ﻴﻨﻁﻠﻕ ﻗﺒﻴل ﻋﻤل ﻨﺴﺨﺔ ﻤﻥ ﻗﺎﻟﺏ ﺍﻟﻌﻨﺼﺭ‪ ..‬ﻭﺍﻟﻤﻌﺎﻤل ﺍﻟﺜﺎﻨﻲ ‪ e‬ﻟﻬﺫﺍ ﺍﻟﺤﺩﺙ ﻤﻥ ﺍﻟﻨـﻭﻉ‬
‫‪ ،DataRepeaterItemCloneEventArgs‬ﻭﻫﻭ ﻴﻤﺘﻠﻙ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬

‫‪ Source‬ﺘﻌﻴﺩ ﻋﻨﺼﺭ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ‪ DataRepeaterItem‬ﺍﻟﺫﻱ ﺴـﻴﺘﻡ‬


‫ﻨﺴﺨﻪ‪.‬‬
‫ﺘﻘﺭﺃ ﺃﻭ ﺘﻐﻴﺭ ﻋﻨـﺼﺭ ﻤﻜـﺭﺭ ﺍﻟﺒﻴﺎﻨـﺎﺕ ‪DataRepeaterItem‬‬ ‫‪Target‬‬
‫ﺍﻟﻨﺎﺘﺞ ﻤﻥ ﻋﻤﻠﻴﺔ ﺍﻟﻨﺴﺦ‪ ..‬ﻫﺫﺍ ﻴﺘﻴﺢ ﻟﻙ ﺍﻟﺘﺤﻜﻡ ﻓﻲ ﻋﻤﻠﻴﺔ ﺍﻟﻨﺴﺦ ﻜﻤﺎ‬
‫ﺘﺭﻴﺩ‪ ،‬ﻓﺎﻟﻜﺎﺌﻥ ﺍﻟﺫﻱ ﺘﻀﻌﻪ ﻓﻲ ﻫﺫﻩ ﺍﻟﺨﺎﺼﻴﺔ ﻴﻜﻭﻥ ﻫﻭ ﻨﺎﺘﺞ ﺍﻟﻨﺴﺦ‪.‬‬
‫‪ Handled‬ﺍﺠﻌل ﻗﻴﻤﺘﻬﺎ ‪ ،True‬ﻟﺘﻤﻨﻊ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻤﻥ ﺃﺩﺍﺀ ﻋﻤﻠﻴﺔ ﺍﻟﻨـﺴﺦ‬
‫ﺍﻟﺨﺎﺼﺔ ﺒﻪ‪ ..‬ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﻴﺠﺏ ﻋﻠﻴﻙ ﺃﻥ ﺘﺄﺨﺫ ﻨﺴﺨﺔ ﻤﻥ ﺍﻟﻜﺎﺌﻥ‬
‫ﺍﻟﻤﻭﻀﺢ ﻓﻲ ﺍﻟﺨﺎﺼﻴﺔ ‪ ،Source‬ﻭﺘﺠﺭﻱ ﻋﻠـﻰ ﻫـﺫﻩ ﺍﻟﻨـﺴﺨﺔ‬
‫ﺍﻟﺘﻌﺩﻴﻼﺕ ﺍﻟﺘﻲ ﺘﺭﻴﺩﻫﺎ‪ ،‬ﺜﻡ ﺘﻀﻌﻬﺎ ﻓﻲ ﺍﻟﺨﺎﺼﻴﺔ ‪.Target‬‬

‫‪٢٤‬‬
‫ﺘﻡ ﻨﺴﺦ ﺍﻟﻌﻨﺼﺭ ‪:ItemCloned‬‬
‫ﻴﻨﻁﻠﻕ ﺒﻌﺩ ﻨﺴﺦ ﻋﻨﺼﺭ ﻤﻥ ﻗﺎﻟﺏ ﺍﻟﻌﻨﺎﺼﺭ‪ ..‬ﻭﺍﻟﻤﻌﺎﻤل ﺍﻟﺜﺎﻨﻲ ‪ e‬ﻟﻬﺫﺍ ﺍﻟﺤﺩﺙ ﻤﻥ ﺍﻟﻨـﻭﻉ‬
‫‪ ،DataRepeaterItemEventArgs‬ﻭﻫﻭ ﻴﻤﺘﻠـﻙ ﺍﻟﺨﺎﺼـﻴﺔ ‪DataRepeaterItem‬‬
‫ﺍﻟﺘﻲ ﺘﻌﻴﺩ ﺍﻟﻌﻨﺼﺭ ﺍﻟﻤﻨﺴﻭﺥ‪ ..‬ﻻﺤﻅ ﺃﻥ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻟﻡ ﻴﻌﺭﺽ ﺒﻌﺩ ﻓﻲ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪،‬‬
‫ﻟﻬﺫﺍ ﻻ ﺘﺤﺎﻭل ﺍﺴﺘﺨﺩﺍﻡ ﺭﻗﻤﻪ ﻓﻲ ﺃﻱ ﻋﻤﻠﻴﺔ‪ ،‬ﻓﺴﻴﻜﻭﻥ ﺼﻔﺭﺍ ﺩﺍﺌﻤﺎ!‪ ..‬ﻜﻤـﺎ ﺃﻥ ﺍﻷﺩﻭﺍﺕ‬
‫ﺍﻟﻤﻭﺠﻭﺩﺓ ﻋﻠﻰ ﺍﻟﻌﻨﺼﺭ ﻤﺎ ﺯﺍﻟﺕ ﻓﺎﺭﻏﺔ ﻭﻟﻡ ﺘﺭﺘﺒﻁ ﺒﻤﺼﺩﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﻌﺩ‪ ،‬ﻟﻬﺫﺍ ﻻ ﺘﺤﺎﻭل‬
‫ﻗﺭﺍﺀﺓ ﻗﻴﻤﻬﺎ‪ ..‬ﻜل ﻤﺎ ﻴﻤﻜﻨﻙ ﻓﻌﻠﻪ ﻫﻭ ﺘﻐﻴﻴﺭ ﺨﺼﺎﺌﺹ ﻫـﺫﻩ ﺍﻷﺩﻭﺍﺕ ﺒﺎﻟﻁﺭﻴﻘـﺔ ﺍﻟﺘـﻲ‬
‫ﺘﻨﺎﺴﺒﻙ‪ ،‬ﻜﺄﻥ ﺘﻤﻸ ﻗﺎﺌﻤﺔ ﺒﻤﺠﻤﻭﻋﺔ ﻤﻥ ﺍﻟﻌﻨﺎﺼﺭ ﻤﺜﻼ‪.‬‬

‫ﺭﺴﻡ ﻋﻨﺼﺭ ‪:DrawItem‬‬


‫ﻴﻨﻁﻠﻕ ﻋﻨﺩ ﺭﺴﻡ ﻋﻨﺼﺭ ﻓﻲ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ..‬ﻻﺤﻅ ﺃﻥ ﺭﺴﻡ ﺍﻟﻌﻨﺼﺭ ﻴﺘﻜـﺭﺭ ﻤـﺭﺍﺕ‬
‫ﻋﺩﻴﺩﺓ‪ ،‬ﺤﻴﺙ ﻴﻌﺎﺩ ﺭﺴﻡ ﺍﻟﻌﻨﺼﺭ ﻜﻠﻤﺎ ﻅﻬﺭ ﻓﻲ ﻤﺴﺎﺤﺔ ﺍﻟﻌﺭﺽ ﻤﻊ ﺤﺭﻜﺔ ﺍﻟﻤﻨﺯﻟﻕ‪.‬‬
‫ﻭﺍﻟﻤﻌﺎﻤل ﺍﻟﺜﺎﻨﻲ ‪ e‬ﻟﻬﺫﺍ ﺍﻟﺤﺩﺙ ﻤﻥ ﺍﻟﻨﻭﻉ ‪ DataRepeaterItemEventArgs‬ﻜﻤﺎ ﻓـﻲ‬
‫ﺍﻟﺤﺩﺙ ﺍﻟﺴﺎﺒﻕ‪.‬‬
‫ﻭﻴﻌﺘﺒﺭ ﻫﺫﺍ ﺍﻟﺤﺩﺙ ﺃﻓﻀل ﺤﺩﺙ ﻴﻤﻜﻨﻙ ﺍﺴﺘﺨﺩﺍﻤﻪ ﻟﻠﺘﺤﻜﻡ ﻓﻲ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﻤﻌﺭﻭﻀﺔ‪ ،‬ﻓﻬﻭ‬
‫ﺍﻟﺤﺩﺙ ﺍﻟﻭﺤﻴﺩ ﺍﻟﺫﻱ ﻴﻨﻁﻠﻕ ﺒﻌﺩ ﺇﻀﺎﻓﺔ ﺍﻟﻌﻨﺼﺭ ﺇﻟﻰ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻌﻼ ﻭﺒﻌﺩ ﺇﺘﻤﺎﻡ ﺭﺒﻁ‬
‫ﺃﺩﻭﺍﺘﻪ ﺒﺎﻟﺒﻴﺎﻨﺎﺕ‪ ..‬ﻟﻬﺫﺍ ﺍﺴﺘﺨﺩﻤﻨﺎ ﻫﺫﺍ ﺍﻟﺤﺩﺙ ﻓـﻲ ﺍﻟﻤـﺸﺭﻭﻉ ‪RepeaterItemColor‬‬
‫ﻷﺩﺍﺀ ﺍﻟﻭﻅﻴﻔﺘﻴﻥ ﺍﻟﺘﺎﻟﻴﺘﻴﻥ‪:‬‬
‫‪ -١‬ﺇﺫﺍ ﻜﺎﻥ ﺍﻟﻌﻨﺼﺭ ﺯﻭﺠﻴﺎ ﻨﻠﻭﻨﻪ ﺒﺎﻷﺨﻀﺭ‪ ،‬ﻭﺇﺫﺍ ﻜﺎﻥ ﻓﺭﺩﻴﺎ ﻨﻠﻭﻨﻪ ﺒﺎﻷﺼﻔﺭ‪:‬‬
‫‪If e.DataRepeaterItem.ItemIndex Mod 2 = 0 Then‬‬
‫‪e.DataRepeaterItem.BackColor = Color.Green‬‬
‫‪Else‬‬
‫‪e.DataRepeaterItem.BackColor = Color.Yellow‬‬
‫‪End If‬‬

‫‪٢٥‬‬
‫‪ -٢‬ﻨﻘﺭﺃ ﺭﻗﻡ ﺍﻟﻤﺅﻟﻑ ﺍﻟﻤﻌﺭﻭﺽ ﻓﻲ ﻤﺭﺒﻊ ﺍﻟﻨﺹ‪ ،‬ﻭﻨﺴﺘﺨﺩﻤﻪ ﻟﻨﺤﺼل ﻋﻠـﻰ ﻜـﺎﺌﻥ‬
‫ﻋﺭﺽ ‪ DataView‬ﻴﺤﺘﻭﻱ ﻋﻠﻰ ﻜﺘﺒﻪ‪ ،‬ﻭﻨﺠﻌﻠﻪ ﻤﺼﺩﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻟﻠﻘﺎﺌﻤـﺔ ﻟﻜـﻲ‬
‫ﺘﻌﺭﺽ ﻜﺘﺏ ﺍﻟﻤﺅﻟﻑ ﺍﻟﺤﺎﻟﻲ‪ ..‬ﻻﺤﻅ ﺃﻥ ﻫﺫﻩ ﻫﻲ ﺍﻟﻁﺭﻴﻘﺔ ﺍﻟـﺼﺤﻴﺤﺔ ﺍﻟﻭﺤﻴـﺩﺓ‬
‫ﻟﺭﺒﻁ ﺍﻟﻘﺎﺌﻤﺔ ﺒﻤﺼﺩﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﺤﻴﺙ ﻴﺠﺏ ﺃﻥ ﻨﺭﺒﻁ ﻜل ﻨﺴﺨﺔ ﻤﻥ ﺍﻟﻘﺎﺌﻤﺔ ﺒﻤﺼﺩﺭ‬
‫ﺒﻴﺎﻨﺎﺘﻬﺎ ﻋﻠﻰ ﺤﺩﺓ‪ ،‬ﻭﻗﺩ ﺭﺃﻴﻨﺎ ﻤﻥ ﻗﺒل ﻜﻴﻑ ﺘﻔﺸل ﻤﺤﺎﻭﻟﺔ ﺭﺒﻁ ﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﻤﻭﻀﻭﻋﺔ‬
‫ﻋﻠﻰ ﻗﺎﻟﺏ ﺍﻟﻌﻨﺼﺭ ﺒﺎﻟﺒﻴﺎﻨﺎﺕ‪ ..‬ﻟﻜﻥ ﻋﻴﺏ ﻫﺫﻩ ﺍﻟﻁﺭﻴﻘﺔ ﻫﻭ ﺃﻨﻙ ﻤﻀﻁﺭ ﺇﻟﻰ ﺇﻋﺎﺩﺓ‬
‫ﺭﺒﻁ ﺍﻟﻘﺎﺌﻤﺔ ﺒﻤﺼﺩﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﻜل ﻤﺭﺓ ﻴﺘﻡ ﻓﻴﻬﺎ ﺭﺴﻡ ﺍﻟﻌﻨﺼﺭ‪ ..‬ﻭﻟﻭ ﺠﺭﺒـﺕ‬
‫ﺍﻟﻜﻭﺩ ﺍﻟﺘﺎﻟﻲ‪ ،‬ﻓﺴﻴﺅﺩﻱ ﺇﻟﻰ ﻨﺘﺎﺌﺞ ﺨﺎﻁﺌﺔ‪ ،‬ﻭﺴﺘﻌﺭﺽ ﺒﻌﺽ ﺍﻟﻘﻭﺍﺌﻡ ﻜﺘﺏ ﻤـﺅﻟﻔﻴﻥ‬
‫ﺁﺨﺭﻴﻥ‪:‬‬
‫‪If BksLst.DataSource Is Nothing Then‬‬
‫‪BksLst.DataSource = BooksView‬‬
‫"‪BksLst.DisplayMember = "Book‬‬
‫‪End If‬‬

‫‪٢٦‬‬
‫ﺍﻟﺴﺒﺏ ﻓﻲ ﻫﺫﺍ ﺃﻥ ﺍﻟﺸﺭﻁ ﺴﻴﻜﻭﻥ ﺼﺤﻴﺤﺎ ﻤﺭﺓ ﻭﺍﺤﺩﺓ ﻓﻘﻁ ﻋﻨﺩ ﺭﺴﻡ ﺍﻟﻘﺎﺌﻤﺔ ﻷﻭل‬
‫ﻤﺭﺓ‪ ،‬ﻟﻜﻥ ﺒﻌﺩ ﻫﺫﺍ ﻜﻠﻤﺎ ﺘﺤﺭﻙ ﺍﻟﻤﻨﺯﻟﻕ ﻭﺃﻋﻴﺩ ﺭﺴﻡ ﺍﻟﻌﻨﺼﺭ‪ ،‬ﻓـﺴﻴﻜﻭﻥ ﺍﻟـﺸﺭﻁ‬
‫ﺨﺎﻁﺌﺎ‪ ،‬ﻭﻟﻥ ﻴﺘﻡ ﺭﺒﻁ ﺍﻟﻘﺎﺌﻤﺔ ﺒﻤﺼﺩﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﻤﻤﺎ ﺴـﻴﺠﻌﻠﻬﺎ ﺘﻌـﺭﺽ ﻨﺘـﺎﺌﺞ‬
‫ﺨﺎﻁﺌﺔ‪ ..‬ﻟﺴﺕ ﺃﻋﺭﻑ ﻴﻘﻴﻨﺎ ﺴﺒﺏ ﻫﺫﺍ‪ ،‬ﻭﻟﻜﻨﻲ ﺃﺨﻤﻥ ﺃﻥ ﻤﺼﻤﻤﻲ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨـﺎﺕ‬
‫ﻴﺤﺴ‪‬ﻨﻭﻥ ﺃﺩﺍﺀﻩ ﺒﺘﺤﺭﻴﻙ ﺍﻟﻘﻭﺍﺌﻡ ﻤﻥ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﺘﻲ ﺍﺨﺘﻔﺕ ﻤﻊ ﺤﺭﻜـﺔ ﺍﻟﻤﻨﺯﻟـﻕ‪،‬‬
‫ﻟﻌﺭﻀﻬﺎ ﻋﻠﻰ ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﺘﻲ ﻅﻬﺭﺕ ﻋﻠﻰ ﺍﻟﺸﺎﺸﺔ!‪ ..‬ﻟﻬﺫﺍ ﻟﻭ ﻟـﻡ ﺘﻘـﻡ ﺒﺘﺤـﺩﻴﺙ‬
‫ﻤﺤﺘﻭﻴﺎﺕ ﻜل ﻗﺎﺌﻤﺔ ﺒﻨﻔﺴﻙ ﻋﻨﺩ ﺭﺴﻡ ﺍﻟﻌﻨﺼﺭ‪ ،‬ﻓﺈﻨﻬﺎ ﺘﻅل ﺘﺤﺘﻔﻅ ﺒﻨﺘـﺎﺌﺞ ﺘﺨـﺹ‬
‫ﺴﺠﻼﺕ ﺃﺨﺭﻯ!‬
‫ﻻﺤﻅ ﺃﻥ ﺨﻁﺄ ﺴﻴﺤﺩﺙ ﻓﻲ ﺍﻟﻜﻭﺩ ﺍﻟﺫﻱ ﻜﺘﺒﻨﺎﻩ ﻋﻨﺩ ﺭﺴﻡ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺠﺩﻴـﺩ‪ ،‬ﻷﻨـﻪ ﻏﻴـﺭ‬
‫ﻤﺭﺘﺒﻁ ﺒﻌﺩ ﺒﺼﻑ ﻓﻲ ﻤﺠﻤﻭﻋﺔ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ..‬ﻟﻬﺫﺍ ﻋﻠﻴﻨﺎ ﺇﻀﺎﻓﺔ ﺸﺭﻁ ﻹﻨﻬﺎﺀ ﺍﻟﻜﻭﺩ ﺇﺫﺍ ﻜﺎﻥ‬
‫ﺍﻟﻌﻨﺼﺭ ﺠﺩﻴﺩﺍ‪ ..‬ﻴﻤﻜﻨﻨﺎ ﺃﻥ ﻨﻌﺭﻑ ﻫﺫﺍ ﺇﺫﺍ ﻜﺎﻥ ﻤﺭﺒﻊ ﺍﻟﻨﺹ ‪ IDTextBox‬ﻴﺤﻤل ﺭﻗﻤﺎ‬
‫ﺴﺎﻟﺒﺎ ﻷﻨﻪ ﻟﻡ ﻴﺄﺨﺫ ﺭﻗﻤﺎ ﺘﻠﻘﺎﺌﻴﺎ ﺒﻌﺩ‪:‬‬
‫= ‪Dim AuthorID As Integer‬‬
‫‪Itm.Controls("IDTextBox").Text‬‬
‫‪If AuthorID < 0 Then Exit Sub‬‬
‫ﻭﻹﻜﻤﺎل ﻭﻅﻴﻔﺔ ﺍﻟﺒﺭﻨﺎﻤﺞ‪ ،‬ﺴﻤﺤﻨﺎ ﻟﻠﻤﺴﺘﺨﺩﻡ ﺒﺎﻟﻨﻘﺭ ﺍﻟﻤـﺯﺩﻭﺝ ﺒﺎﻟﻔـﺄﺭﺓ ﻋﻠـﻰ ﺍﻟﻘﺎﺌﻤـﺔ‪،‬‬
‫ﻭﺍﺴﺘﺨﺩﻤﻨﺎ ﺍﻟﺤﺩﺙ ‪ DoubleClick‬ﺍﻟﺨﺎﺹ ﺒﻬﺎ ﻟﻨﻌﺭﺽ ﺘﻔﺎﺼﻴل ﻜﺘﺏ ﺍﻟﻤﺅﻟﻑ ﺍﻟﺤـﺎﻟﻲ‬
‫ﻓﻲ ﺠﺩﻭل ﻋﺭﺽ ﻋﻠﻰ ﻨﻤﻭﺫﺝ ﻤﺴﺘﻘل‪ ..‬ﻓﻲ ﺍﻟﺤﻘﻴﻘﺔ ﻫﺫﺍ ﺍﻟﻜﻭﺩ ﻓﻲ ﻤﻨﺘﻬﻰ ﺍﻟﺒﺴﺎﻁﺔ‪ ،‬ﻓﻜل‬
‫ﻤﺎ ﻨﻔﻌﻠﻪ ﻓﻴﻪ ﻫﻭ ﺠﻌل ﻤﺼﺩﺭ ﺒﻴﺎﻨﺎﺕ ﺠﺩﻭل ﺍﻟﻌﺭﺽ‪ ،‬ﻫﻭ ﻨﻔﺴﻪ ﻤﺼﺩﺭ ﺒﻴﺎﻨﺎﺕ ﺍﻟﻘﺎﺌﻤﺔ‪:‬‬
‫‪FrmBooks.GrdBooks.DataSource = BksLst.DataSource‬‬
‫ﺍﻟﻨﻘﻁﺔ ﺍﻟﻭﺤﻴﺩﺓ ﺍﻟﻬﺎﻤﺔ ﻫﻨﺎ‪ ،‬ﻫﻲ ﺃﻨﻨﺎ ﻻ ﻨﺴﺘﺨﺩﻡ ﺍﻟﻘﺎﺌﻤﺔ ‪ BooksList‬ﺍﻟﻤﻭﻀﻭﻋﺔ ﻋﻠـﻰ‬
‫ﻗﺎﻟﺏ ﺍﻟﻌﻨﺼﺭ‪ ،‬ﻭﺇﻨﻤﺎ ﻨﺴﺘﺨﺩﻡ ﻨﺴﺨﺔ ﺍﻟﻘﺎﺌﻤﺔ ﺍﻟﺨﺎﺼﺔ ﺒﺎﻟﻌﻨـﺼﺭ ﺍﻟﺤـﺎﻟﻲ ﻓـﻲ ﻤﻜـﺭﺭ‬
‫ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ..‬ﻭﺴﻨﻌﺭﻑ ﻻﺤﻘﺎ ﻜﻴﻑ ﻨﺤﺼل ﻋﻠﻰ ﻫﺫﻩ ﺍﻟﻨﺴﺨﺔ‪.‬‬

‫‪٢٧‬‬
‫ﺍﺴﺘﺨﺩﺍﻡ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﺍﻟﻭﻀﻊ ﺍﻻﻓﺘﺭﺍﻀﻲ‪:‬‬
‫ﺭﺃﻴﻨﺎ ﻤﻥ ﻗﺒل ﻜﻴﻑ ﻨﺴﺘﺨﺩﻡ ﻗﺎﺌﻤﺔ ﺍﻟﻌﺭﺽ ‪ ListView‬ﻭﺠﺩﻭل ﺍﻟﻌﺭﺽ ‪DataGridView‬‬
‫ﻓﻲ ﺍﻟﻭﻀﻊ ﺍﻻﻓﺘﺭﺍﻀﻲ‪ ..‬ﻭﺒﺎﻟﻤﺜل ﻴﻤﻜﻨﻨﺎ ﺍﺴﺘﺨﺩﺍﻡ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﺍﻟﻭﻀﻊ ﺍﻻﻓﺘﺭﺍﻀـﻲ‪..‬‬
‫ﻫﺫﺍ ﻤﻔﻴﺩ ﺇﺫﺍ ﻜﻨﺕ ﺘﻭﻟﺩ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﻨﺎﺀ ﻋﻠﻰ ﻤﻌﺎﺩﻟﺔ ﺩﻭﻥ ﺍﻟﺤﺎﺠﺔ ﺇﻟﻰ ﻤﺼﺩﺭ ﺒﻴﺎﻨﺎﺕ‪ ،‬ﺃﻭ ﺇﺫﺍ ﻜﺎﻥ‬
‫ﺤﺠﻡ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻀﺨﻤﺎ‪ ،‬ﻭﺘﺭﻴﺩ ﺍﻟﺘﺩﺨل ﻓﻲ ﻁﺭﻴﻘﺔ ﻋﺭﻀﻬﺎ ﻟﺘﺤﺴﻴﻥ ﺃﺩﺍﺀ ﺍﻟﺒﺭﻨﺎﻤﺞ‪.‬‬
‫ﻭﻴﺭﻴﻙ ﺍﻟﻤﺸﺭﻭﻉ ‪ VirtualRepeater‬ﻜﻴﻑ ﻴﻤﻜﻥ ﻋﺭﺽ ﺒﻴﺎﻨﺎﺕ ﺍﻟﻤـﺅﻟﻔﻴﻥ ﻓـﻲ ﻤﻜـﺭﺭ‬
‫ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﻁﺭﻴﻘﺔ ﺍﻓﺘﺭﺍﻀﻴﺔ‪ ،‬ﻤﻊ ﻋﺭﺽ ﻜﺘﺏ ﻜل ﻤﺅﻟﻑ ﻓﻲ ﺠﺩﻭل ﻋﺭﺽ ﻓﻲ ﻨﻔﺱ ﺍﻟﺴﺠل‪..‬‬
‫ﻓﻲ ﻫﺫﻩ ﺍﻟﺤﺎﻟﺔ ﻴﺤﺘﻔﻅ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﺍﻟﺫﺍﻜﺭﺓ ﺒﺒﻴﺎﻨﺎﺕ ﺍﻟﻤﺅﻟﻔﻴﻥ ﺍﻟﻅﺎﻫﺭﻴﻥ ﻋﻠـﻰ ﺍﻟـﺸﺎﺸﺔ‬
‫ﻓﻘﻁ‪ ،‬ﻭﻜﻠﻤﺎ ﺘﺤﺭﻙ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺒﺎﻟﻤﻨﺯﻟﻕ ﺴﻴﻁﻠﺏ ﻤﻨﺎ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺇﻤﺩﺍﺩﻩ ﺒﺒﻴﺎﻨﺎﺕ ﺍﻟﻤـﺅﻟﻔﻴﻥ‬
‫ﺍﻟﻤﺭﺍﺩ ﻋﺭﻀﻬﻡ‪.‬‬

‫ﺩﻋﻨﺎ ﻨﺘﻌﺭﻑ ﻋﻠﻰ ﺍﻟﺨﺼﺎﺌﺹ ﻭﺍﻟﻭﺴﺎﺌل ﻭﺍﻷﺤﺩﺍﺙ ﺍﻟﺘﻲ ﻴﻤﻨﺤﻬﺎ ﻟﻨﺎ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻟﻠﺘﻌﺎﻤـل‬
‫ﻤﻊ ﺍﻟﻭﻀﻊ ﺍﻻﻓﺘﺭﺍﻀﻲ‪ ،‬ﻟﻨﺭﻯ ﻜﻴﻑ ﻨﺴﺘﺨﺩﻤﻬﺎ ﻓﻲ ﻜﺘﺎﺒﺔ ﻫﺫﺍ ﺍﻟﻤﺸﺭﻭﻉ‪:‬‬

‫‪٢٨‬‬
‫ﺍﻟﻭﻀﻊ ﺍﻻﻓﺘﺭﺍﻀﻲ ‪:VirtualMode‬‬
‫ﺇﺫﺍ ﺠﻌﻠﺕ ﻗﻴﻤﺔ ﻫﺫﻩ ﺍﻟﺨﺎﺼﻴﺔ ‪ ،True‬ﻓﺴﻴﻌﻤل ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﺍﻟﻭﻀﻊ ﺍﻻﻓﺘﺭﺍﻀﻲ‪..‬‬
‫ﻭﺍﻟﻘﻴﻤﺔ ﺍﻻﺒﺘﺩﺍﺌﻴﺔ ﻟﻬﺫﻩ ﺍﻟﺨﺎﺼﻴﺔ ﻫﻲ ‪ ..False‬ﻭﻗﺩ ﺍﺴﺘﺨﺩﻤﻨﺎ ﻨﺎﻓـﺫﺓ ﺍﻟﺨـﺼﺎﺌﺹ ﻓـﻲ‬
‫ﺍﻟﻤﺸﺭﻭﻉ ‪ VirtualRepeater‬ﻟﺠﻌل ﻗﻴﻤﺔ ﻫﺫﻩ ﺍﻟﺨﺎﺼﺔ ‪ ..True‬ﻭﻨﻅﺭﺍ ﻷﻥ ﺍﻟﺨﺎﺼـﻴﺔ‬
‫‪ ItemCount‬ﻻ ﺘﻅﻬﺭ ﻓﻲ ﻨﺎﻓﺫﺓ ﺍﻟﺨﺼﺎﺌﺹ‪ ،‬ﻓﻘﺩ ﺍﺴﺘﺨﺩﻤﻨﺎ ﺤﺩﺙ ﺘﺤﻤﻴل ﺍﻟﻨﻤﻭﺫﺝ ﻟﻨﻀﻊ‬
‫ﻓﻴﻬﺎ ﻋﺩﺩ ﺍﻟﻤﺅﻟﻔﻴﻥ ﺍﻟﻤﺭﺍﺩ ﻋﺭﻀﻬﻡ‪:‬‬
‫‪DataRepeater1.ItemCount = BooksDataSet.Authors.Count‬‬
‫ﻟﻭ ﺸﻐﻠﺕ ﺍﻟﻤﺸﺭﻭﻉ ﺍﻵﻥ‪ ،‬ﻓﺴﺘﺭﻯ ﻋﻨﺎﺼﺭ ﺒﻌﺩﺩ ﺍﻟﻤﺅﻟﻔﻴﻥ ﻤﻌﺭﻭﻀﺔ ﻓﻲ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪..‬‬
‫ﻭﺭﻏﻡ ﺃﻥ ﻫﺫﻩ ﺍﻟﻌﻨﺎﺼﺭ ﺴﺘﻌﺭﺽ ﺍﻷﺩﻭﺍﺕ ﺍﻟﺘﻲ ﻭﻀﻌﺘﻬﺎ ﻋﻠﻰ ﻗﺎﻟﺏ ﺍﻟﻌﻨﺼﺭ ﻓﻲ ﻭﻗـﺕ‬
‫ﺍﻟﺘﺼﻤﻴﻡ‪ ،‬ﻓﺴﺘﻜﻭﻥ ﻓﺎﺭﻏﺔ‪ ،‬ﻷﻥ ﺘﻘﻨﻴﺔ ﺍﻟﺭﺒﻁ ‪ Binding‬ﻻ ﺘﻌﻤل ﻓﻲ ﺍﻟﻭﻀﻊ ﺍﻻﻓﺘﺭﺍﻀﻲ‬
‫ﻟﻸﺴﻑ!!‪ ..‬ﻟﻬﺫﺍ ﻋﻠﻴﻙ ﻜﺘﺎﺒﺔ ﺍﻟﻜﻭﺩ ﺍﻟﺫﻱ ﻴﻌﺭﺽ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﻫﺫﻩ ﺍﻷﺩﻭﺍﺕ ﺒﻨﻔﺴﻙ‪ ،‬ﻜﻤـﺎ‬
‫ﺴﻨﺭﻯ ﺒﻌﺩ ﻗﻠﻴل‪.‬‬

‫ﻗﻴﻤﺔ ﺍﻟﻌﻨﺼﺭ ﻤﻁﻠﻭﺒﺔ ‪:ItemValueNeeded‬‬


‫ﻴﻨﻁﻠﻕ ﻫﺫﺍ ﺍﻟﺤﺩﺙ ﻋﻨﺩﻤﺎ ﺘﺤﺘﺎﺝ ﺃﺩﺍﺓ ﻤﻭﺠﻭﺩﺓ ﻓﻲ ﺃﺤﺩ ﺍﻟﺴﺠﻼﺕ ﺇﻟﻰ ﻋﺭﺽ ﻗﻴﻤﺘﻬﺎ‪ ..‬ﻫﺫﺍ‬
‫ﻴﺸﻤل ﺍﻟﻼﻓﺘﺎﺕ ﻭﻤﺭﺒﻌﺎﺕ ﺍﻟﻨﺼﻭﺹ‪ ،‬ﻟﻬﺫﺍ ﻋﻠﻴﻙ ﺃﻥ ﺘﺘﺤﻘﻕ ﻤﻥ ﺍﻷﺩﺍﺓ ﻗﺒل ﺃﻥ ﺘﻀﻊ ﻓﻴﻬﺎ‬
‫ﺍﻟﻘﻴﻤﺔ‪ ..‬ﻭﻴﻌﺘﺒﺭ ﻫﺫﺍ ﺍﻟﺤﺩﺙ ﺍﻟﻤﻜﺎﻥ ﺍﻟﻤﻼﺌﻡ ﻟﻌﺭﺽ ﺍﻟﺒﻴﺎﻨﺎﺕ ﻓﻲ ﺍﻷﺩﻭﺍﺕ ﻓـﻲ ﺍﻟﻭﻀـﻊ‬
‫ﺍﻻﻓﺘﺭﺍﻀـــﻲ‪ ..‬ﻭﺍﻟﻤﻌﺎﻤـــل ﺍﻟﺜـــﺎﻨﻲ ‪ e‬ﻟﻬـــﺫﻩ ﺍﻟﺤـــﺩﺙ ﻤـــﻥ ﺍﻟﻨـــﻭﻉ‬
‫‪ ،DataRepeaterItemValueEventArgs‬ﻭﻟﻪ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬

‫‪ ItemIndex‬ﺘﻌﻴﺩ ﺭﻗﻡ ﺍﻟﻌﻨﺼﺭ ﻓﻲ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪.‬‬


‫‪ Control‬ﺘﻌﻴﺩ ﺍﻷﺩﺍﺓ ﺍﻟﺘﻲ ﺘﺤﺘﺎﺝ ﺇﻟﻰ ﻋﺭﺽ ﺍﻟﺒﻴﺎﻨﺎﺕ‪.‬‬
‫‪ Property‬ﺘﻌﻴﺩ ﺍﺴﻡ ﺨﺎﺼﻴﺔ ﺍﻷﺩﺍﺓ ﺍﻟﺘـﻲ ﺴـﺘﻌﺭﺽ ﺍﻟﺒﻴﺎﻨـﺎﺕ )ﻋﻨـﺼﺭ‬
‫‪Name‬‬
‫ﺍﻟﻌﺭﺽ(‪.‬‬
‫‪٢٩‬‬
‫ﻀﻊ ﻓﻲ ﻫﺫﻩ ﺍﻟﺨﺎﺼﻴﺔ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺘﻲ ﺘﺭﻴﺩ ﻋﺭﻀﻬﺎ ﻓـﻲ ﺍﻷﺩﺍﺓ‪..‬‬ ‫‪Value‬‬
‫ﻻﺤﻅ ﺃﻥ ﻫﺫﻩ ﺍﻟﺨﺎﺼﻴﺔ ﺤﺴﺎﺴﺔ ﺠﺩﺍ ﻟﻨﻭﻉ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﻟﻬﺫﺍ ﻋﻠﻴـﻙ‬
‫ﺇﺠﺭﺍﺀ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺘﺤﻭﻴل ﺍﻟﻤﻨﺎﺴﺒﺔ ﻗﺒل ﻭﻀﻊ ﺍﻟﻘﻴﻤﺔ ﻓﻴﻬﺎ‪ ..‬ﻤﺜﻼ‪:‬‬
‫ﻟﻭ ﻭﻀﻌﺕ ﺍﻟﺭﻗﻡ ‪ ١‬ﻓﻲ ﻫﺫﻩ ﺍﻟﺨﺎﺼﻴﺔ ﻟﻌﺭﻀﻪ ﻓﻲ ﻤﺭﺒﻊ ﺍﻟﻨﺹ‬
‫‪ IDTextBox‬ﺍﻟﺫﻱ ﻴﻌﺭﺽ ﺭﻗﻡ ﺍﻟﻤﺅﻟﻑ‪ ،‬ﻓﻠﻥ ﻴﻅﻬﺭ ﻓﻲ ﻤﺭﺒﻊ‬
‫ﺍﻟﻨﺹ ﺃﻱ ﺸﻲﺀ!‪ ..‬ﺒﻴﻨﻤﺎ ﻟﻭ ﻭﻀـﻌﺕ ﺍﻟـﻨﺹ "‪ "١‬ﻓـﻲ ﻫـﺫﻩ‬
‫ﺍﻟﺨﺎﺼﻴﺔ ﻓﺴﻴﻅﻬﺭ ﻓﻲ ﻤﺭﺒﻊ ﺍﻟﻨﺹ!‪ ..‬ﺍﻟـﺴﺒﺏ ﻓـﻲ ﻫـﺫﺍ ﺃﻥ‬
‫ﺍﻟﺨﺎﺼﻴﺔ ‪ Text‬ﺘﻘﺒل ﻨﺼﻭﺼﺎ ﻻ ﺃﻋﺩﺍﺩﺍ ﺼﺤﻴﺤﺔ‪ ،‬ﻭﺍﻟﺨﺎﺼـﻴﺔ‬
‫‪ e.Value‬ﻻ ﺘﻘﻭﻡ ﺒﺎﻟﺘﺤﻭﻴل ﺍﻟﻤﻁﻠﻭﺏ!‪ ..‬ﻟﻬﺫﺍ ﻋﻠﻴﻙ ﺍﺴـﺘﺨﺩﺍﻡ‬
‫ﺍﻟﻭﺴﻴﻠﺔ ‪ ToString‬ﻟﺘﺤﻭﻴل ﺍﻟﺤﻘﻭل ﺍﻟﺭﻗﻤﻴﺔ ﺇﻟﻰ ﻨﺼﻭﺹ ﻗﺒل‬
‫ﻭﻀﻌﻬﺎ ﻓﻲ ﻫﺫﻩ ﺍﻟﺨﺎﺼﻴﺔ‪.‬‬

‫ﻭﻗﺩ ﺍﺴﺘﺨﺩﻤﻨﺎ ﻫﺫﺍ ﺍﻟﺤﺩﺙ ﻓـﻲ ﺍﻟﻤـﺸﺭﻭﻉ ‪ VirtualRepeater‬ﻟﻌـﺭﺽ ﺍﻟﻘـﻴﻡ ﻓـﻲ‬


‫ﺍﻷﺩﻭﺍﺕ‪ ..‬ﻫﺫﺍ ﺍﻟﻜﻭﺩ ﺒﺴﻴﻁ ﻟﻠﻐﺎﻴﺔ‪ ،‬ﻓﻬﻭ ﻴﺴﺘﺨﺩﻡ ﺍﻟﺠﻤﻠﺔ ﺍﻟﺸﺭﻁﻴﺔ ‪ Select‬ﻟﻴﻔﺤﺹ ﺍﺴـﻡ‬
‫ﻜل ﺃﺩﺍﺓ‪ ،‬ﻭﻴﻀﻊ ﻓﻴﻬﺎ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﻨﺎﺴﺒﺔ‪ ..‬ﻭﻻ ﺘﺤﺘﺎﺝ ﻗﺭﺍﺀﺓ ﺍﻟﻘﻴﻡ ﻤﻥ ﺠﺩﻭل ﺍﻟﻤﺅﻟﻔﻴﻥ ﺇﻟـﻰ‬
‫ﻜﻭﺩ ﻤﻌﻘﺩ‪ ،‬ﻓﺭﻗﻡ ﺍﻟﻌﻨﺼﺭ ﻓﻲ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﻫﻭ ﻨﻔﺴﻪ ﺭﻗﻡ ﺍﻟﺴﺠل ﻓﻲ ﺠﺩﻭل ﺍﻟﻤﺅﻟﻔﻴﻥ‪..‬‬
‫ﺴﻴﻜﻭﻥ ﻫﺫﺍ ﺍﻟﻜﻭﺩ ﻋﻠﻰ ﺍﻟﺼﻭﺭﺓ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬
‫‪Dim Authors = BooksDataSet.Authors‬‬
‫‪Select Case e.Control.Name‬‬
‫"‪Case "IDTextBox‬‬
‫‪e.Value =Authors(e.ItemIndex).ID.ToString‬‬
‫"‪Case "AuthorTextBox‬‬
‫‪e.Value =Authors(e.ItemIndex).Author‬‬
‫‪End Select‬‬

‫‪٣٠‬‬
‫ﻭﻨﻅﺭﺍ ﻷﻥ ﺒﻌﺽ ﺍﻟﺤﻘﻭل ﻗﺩ ﺘﺴﺒﺏ ﻤﺸﺎﻜل ﺇﺫﺍ ﻜﺎﻨﺕ ﻓﺎﺭﻏـﺔ ‪ ،DbNull‬ﻟـﺫﺍ ﻋﻠﻴـﻙ‬
‫ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻤﻘﻁﻊ ‪ Try Catch‬ﻟﻼﺤﺘﺭﺍﺯ‪ ..‬ﻭﺴﺘﺠﺩ ﻫﺫﺍ ﺍﻟﻜﻭﺩ ﻜـﺎﻤﻼ ﻓـﻲ ﺍﻟﻤـﺸﺭﻭﻉ‬
‫‪.VirtualRepeater‬‬
‫ﻻﺤﻅ ﺃﻥ ﺠﺩﻭل ﺍﻟﻌﺭﺽ ﻻ ﻴﻁﻠﻕ ﺍﻟﺤﺩﺙ ‪ ،ItemValueNeeded‬ﻟﻬﺫﺍ ﻋﻠﻴﻙ ﺍﺴـﺘﺨﺩﺍﻡ‬
‫ﺍﻟﺤﺩﺙ ‪ DrawItem‬ﻟﺭﺒﻁ ﺠﺩﻭل ﺍﻟﻌﺭﺽ ﺒﻜﺘﺏ ﺍﻟﻤﺅﻟﻑ‪ ..‬ﻜل ﻤﺎ ﺴﻨﻔﻌﻠﻪ‪ ،‬ﻫﻭ ﺍﻟﺤﺼﻭل‬
‫ﻋﻠﻰ ﻜﺎﺌﻥ ﻋﺭﺽ ‪ View Object‬ﻴﺤﺘﻭﻱ ﻋﻠﻰ ﻜﺘـﺏ ﺍﻟﻤﺅﻟـﻑ ﺍﻟﺤـﺎﻟﻲ‪ ،‬ﻭﻭﻀـﻌﻪ‬
‫ﻜﻤﺼﺩﺭ ﺒﻴﺎﻨﺎﺕ ﻟﺠﺩﻭل ﺍﻟﻌﺭﺽ‪:‬‬
‫‪Dim Itm = e.DataRepeaterItem‬‬
‫‪Dim Authors = BooksDataSet.Authors‬‬
‫ﺍﻟﺤﺼﻭل ﻋﻠﻰ ﻜﺎﺌﻥ ﻋﺭﺽ ﺍﻟﺼﻑ ﺍﻟﺨﺎﺹ ﺒﺎﻟﻤﺅﻟﻑ ﺍﻟﺤﺎﻟﻲ '‬
‫)‪Dim Rv = Authors.DefaultView(Itm.ItemIndex‬‬
‫)‪Dim Rl = BooksDataSet.Authors.ChildRelations(0‬‬
‫ﺍﻟﺤﺼﻭل ﻋﻠﻰ ﻨﺴﺨﺔ ﺠﺩﻭل ﺍﻟﻌﺭﺽ ﺍﻟﺤﺎﻟﻴﺔ '‬
‫(‪Dim GrdBooks = CType(Itm.Controls‬‬
‫)‪"BooksDataGridView"), DataGridView‬‬
‫ﺍﻟﺤﺼﻭل ﻋﻠﻰ ﻜﺎﺌﻥ ﻋﺭﺽ ﻜﺘﺏ ﺍﻟﻤﺅﻟﻑ ﺍﻟﺤﺎﻟﻲ ﻤﻥ ﺨﻼل ﺍﻟﻌﻼﻗﺔ '‬
‫ﻭﺍﺴﺘﺨﺩﺍﻤﻪ ﻜﻤﺼﺩﺭ ﺒﻴﺎﻨﺎﺕ ﻟﺠﺩﻭل ﺍﻟﻌﺭﺽ '‬
‫)‪GrdBooks.DataSource = Rv.CreateChildView(Rl‬‬

‫ﻋﻨﺼﺭ ﺠﺩﻴﺩ ﻤﻁﻠﻭﺏ ‪:NewItemNeeded‬‬


‫ﻴﻨﻁﻠﻕ ﻫﺫﺍ ﺍﻟﺤﺩﺙ ﻋﻨﺩﻤﺎ ﻴﻁﻠﺏ ﺍﻟﻤﺴﺘﺨﺩﻡ ﺇﻀﺎﻓﺔ ﺴﺠل ﺠﺩﻴﺩ ﺇﻟﻰ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ﺒﻀﻐﻁ‬
‫‪ ..CTRL+N‬ﻫﺫﺍ ﻴﺘﻴﺢ ﻟﻙ ﺇﻀﺎﻓﺔ ﺴﺠل ﺠﺩﻴﺩ ﺇﻟﻰ ﻤﺼﺩﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﺤﺘﻰ ﻴﻤﻜﻥ ﺤﻔـﻅ‬
‫ﺍﻟﺒﻴﺎﻨﺎﺕ ﺍﻟﺘﻲ ﻴﺩﺨﻠﻬﺎ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻓﻴﻪ‪ ..‬ﻭﻗـﺩ ﺍﺴـﺘﺨﺩﻤﻨﺎ ﻫـﺫﺍ ﺍﻟﺤـﺩﺙ ﻓـﻲ ﺍﻟﻤـﺸﺭﻭﻉ‬
‫‪ VirtualRepeater‬ﻹﻀﺎﻓﺔ ﺼﻑ ﺠﺩﻴﺩ ﺇﻟﻰ ﺠﺩﻭل ﺍﻟﻤﺅﻟﻔﻴﻥ ﻜﺎﻟﺘﺎﻟﻲ‪:‬‬

‫‪٣١‬‬
‫‪Dim R = BooksDataSet.Authors.NewAuthorsRow‬‬
‫" " = ‪R.Author‬‬
‫‪R.CountryID = 12‬‬
‫)‪BooksDataSet.Authors.AddAuthorsRow(R‬‬
‫ﻻﺤﻅ ﺃﻨﻨﺎ ﻭﻀﻌﻨﺎ ﻤﺴﺎﻓﺔ ﻓﻲ ﺤﻘل ﺍﺴﻡ ﺍﻟﻤﺅﻟﻑ‪ ،‬ﻷﻥ ﺠﺩﻭل ﺍﻟﻤﺅﻟﻔﻴﻥ ﻻ ﻴـﺴﻤﺢ ﺒﺘﺭﻜـﻪ‬
‫ﻓﺎﺭﻏﺎ‪ ،‬ﻜﻤﺎ ﻭﻀﻌﻨﺎ ﺍﻟﺭﻗﻡ ‪ ١٢‬ﻤﺒﺩﺌﻴﺎ ﻓﻲ ﺤﻘل ﺭﻗﻡ ﺍﻟﺩﻭﻟﺔ ﻟﻨﻔﺱ ﺍﻟﺴﺒﺏ‪ ..‬ﻟﻭ ﻟﻡ ﻨﻔﻌل ﻫﺫﺍ‪،‬‬
‫ﻓﺴﻴﺤﺩﺙ ﺨﻁﺄ ﻓﻲ ﺍﻟﺒﺭﻨﺎﻤﺞ‪ ..‬ﻭﻴﻤﻜﻨﻙ ﺍﻟﺘﺨﻠﺹ ﻤﻥ ﺍﻟﻤﺴﺎﻓﺔ ﻗﺒل ﻋﺭﻀـﻬﺎ ﻓـﻲ ﻤﺭﺒـﻊ‬
‫ﺍﻟﻨﺹ‪ ،‬ﺒﺎﺴﺘﺨﺩﺍﻡ ﺍﻟﻭﺴﻴﻠﺔ ‪ Trim‬ﻓﻲ ﺍﻟﺤﺩﺙ ‪.ItemValueNeeded‬‬

‫ﺇﻀﺎﻓﺔ ﻋﻨﺼﺭ ‪:ItemsAdded‬‬


‫ﻴﻨﻁﻠﻕ ﻫﺫﺍ ﺍﻟﺤﺩﺙ ﺒﻌﺩ ﺇﻀﺎﻓﺔ ﺍﻟﺴﺠل ﺍﻟﺠﺩﻴﺩ ﺇﻟﻰ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﻟﻴﻤﻜﻨﻙ ﻗـﺭﺍﺀﺓ ﺭﻗـﻡ‬
‫ﺍﻟﻌﻨــﺼﺭ ﺍﻟﺠﺩﻴــﺩ‪ ..‬ﻭﺍﻟﻤﻌﺎﻤــل ﺍﻟﺜــﺎﻨﻲ ‪ e‬ﻟﻬــﺫﺍ ﺍﻟﺤــﺩﺙ ﻤــﻥ ﺍﻟﻨــﻭﻉ‬
‫‪ DataRepeaterAddRemoveItemsEventArgs‬ﺍﻟﺫﻱ ﺘﻌﺭﻓﻨﺎ ﻋﻠﻴﻪ ﺴﺎﺒﻘﺎ‪ ..‬ﻻﺤﻅ‬
‫ﺃﻥ ﺘﺭﺘﻴﺏ ﺍﺴﺘﺩﻋﺎﺀ ﺍﻷﺤﺩﺍﺙ ﻋﻨﺩ ﺇﻀﺎﻓﺔ ﻋﻨﺼﺭ ﺠﺩﻴﺩ ﻜﺎﻟﺘﺎﻟﻲ‪:‬‬
‫‪.NewItemNeeded‬‬ ‫‪-‬‬
‫‪.ItemValueNeeded‬‬ ‫‪-‬‬
‫‪.DrawItem‬‬ ‫‪-‬‬
‫‪.ItemsAdded‬‬ ‫‪-‬‬

‫ﺩﻓﻊ ﻗﻴﻤﺔ ﺍﻟﻌﻨﺼﺭ ‪:ItemValuePushed‬‬


‫ﻴﻨﻁﻠﻕ ﻫﺫﺍ ﺍﻟﺤﺩﺙ ﻋﻨﺩﻤﺎ ﻴﻐﻴﺭ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻗﻴﻤﺔ ﺇﺤﺩﻯ ﺍﻷﺩﻭﺍﺕ ﺍﻟﻤﻭﻀﻭﻋﺔ ﻋﻠﻰ ﺍﻟـﺴﺠل‬
‫ﺍﻟﺤﺎﻟﻲ‪ ،‬ﺜﻡ ﻴﻨﺘﻘل ﻤﻨﻬﺎ ﺇﻟﻰ ﺃﺩﺍﺓ ﺃﺨﺭﻯ‪ ..‬ﻫﺫﺍ ﻴﺘﻴﺢ ﻟﻙ ﻜﺘﺎﺒﺔ ﺍﻟﻜﻭﺩ ﺍﻟﻤﻨﺎﺴﺏ ﻟﺤﻔﻅ ﻗﻴﻤـﺔ‬
‫ﻫﺫﻩ ﺍﻷﺩﺍﺓ ﻓﻲ ﻤﺼﺩﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ..‬ﻭﻻ ﺘﻨﺱ‪ ‬ﻓﺤﺹ ﺍﻟﻘﻴﻤﺔ ﻭﺍﻟﺘﺄﻜﺩ ﻤﻥ ﺃﻨﻬﺎ ﻤﻨﺎﺴـﺒﺔ ﻗﺒـل‬
‫ﻤﺤﺎﻭﻟﺔ ﻨﻘﻠﻬﺎ ﺇﻟﻰ ﻤﺼﺩﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﻜﻲ ﻻ ﻴﺤﺩﺙ ﺨﻁﺄ‪ ..‬ﻭﺴﻴﻜﻭﻥ ﻤﻥ ﺍﻟﺠﻴـﺩ ﺃﻥ ﺘﻤﻨـﻊ‬
‫ﺍﻟﺨﻁﺄ ﻤﻥ ﺍﻟﻤﻨﺒﻊ‪ ،‬ﻜﺎﻟﺘﺎﻟﻲ‪:‬‬
‫‪٣٢‬‬
‫‪ -١‬ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﺨﺎﺼﻴﺔ ‪ MaxLength‬ﻟﺘﺤﺩﻴﺩ ﺃﻗﺼﻰ ﻁﻭل ﻟﻤﺭﺒﻌﺎﺕ ﺍﻟﻨـﺼﻭﺹ ﺍﻟﺘـﻲ‬
‫ﺘﺴﺘﻘﺒل ﻨﺼﻭﺼﺎ‪ ..‬ﻟﻘﺩ ﻭﻀﻌﻨﺎ ﺍﻟﺭﻗﻡ ‪ ٣٠‬ﻓﻲ ﻫﺫﻩ ﺍﻟﺨﺎﺼﻴﺔ ﻓﻲ ﻤﺭﺒﻊ ﺍﻟﻨﺹ ﺍﻟـﺫﻱ‬
‫ﻴﺴﺘﻘﺒل ﺍﺴﻡ ﺍﻟﻤﺅﻟﻑ‪.‬‬
‫‪ -٢‬ﻭﻀﻊ ﺍﻟﻘﻴﻤﺔ ‪ True‬ﻓﻲ ﺍﻟﺨﺎﺼﻴﺔ ‪ ReadOnly‬ﻟﺠﻌل ﻤﺭﺒﻊ ﺍﻟﻨﺹ ﺍﻟﺫﻱ ﻴﻌﺭﺽ ﺭﻗﻡ‬
‫ﺍﻟﻤﺅﻟﻑ ‪ ID‬ﻟﻠﻘﺭﺍﺀﺓ ﻓﻘﻁ‪.‬‬
‫‪ -٣‬ﻜﺘﺎﺒﺔ ﺍﻟﻜﻭﺩ ﺍﻟﻤﻨﺎﺴﺏ ﻓﻲ ﺍﻟﺤﺩﺙ ‪ KeyPress‬ﻓﻲ ﻤﺭﺒﻌﺎﺕ ﺍﻟـﻨﺹ ﺍﻟﺘـﻲ ﺘـﺴﺘﻘﺒل‬
‫ﺃﺭﻗﺎﻤﺎ‪ ،‬ﻟﻤﻨﻊ ﻜﺘﺎﺒﺔ ﺃﻴﺔ ﺤﺭﻭﻑ‪.‬‬
‫‪ -٤‬ﺍﺴﺘﺨﺩﺍﻡ ﺃﺩﺍﺓ ﺍﻟﺘﺎﺭﻴﺦ ﻭﺍﻟﻭﻗﺕ ‪ DateTimePicker‬ﻻﺴﺘﻘﺒﺎل ﺍﻟﺘـﺎﺭﻴﺦ ﺒـﺩﻻ ﻤـﻥ‬
‫ﻤﺭﺒﻌﺎﺕ ﺍﻟﻨﺼﻭﺹ‪ ..‬ﻜﻤﺎ ﻴﻤﻜﻨﻙ ﺍﺴﺘﺨﺩﺍﻡ ﻋﻤﻭﺩ ﻤﺨﺼﺹ ﻟﻌﺭﺽ ﺍﻟﺘـﻭﺍﺭﻴﺦ ﻓـﻲ‬
‫ﺠﺩﻭل ﺍﻟﻌﺭﺽ‪ ،‬ﺒﺎﻟﻁﺭﻴﻘﺔ ﺍﻟﺘﻲ ﺘﻌﻠﻤﻨﺎﻫﺎ ﻓﻲ ﺍﻟﻔﺼل ﺍﻟﺨﺎﺹ ﺒﺠﺩﻭل ﺍﻟﻌﺭﺽ‪.‬‬
‫‪ -٥‬ﺍﺴﺘﺨﺩﺍﻡ ﻗﺎﺌﻤﺔ ﻤﻨﺴﺩﻟﺔ ﻟﻌﺭﺽ ﺃﺴﻤﺎﺀ ﺍﻟﺩﻭل ﺒﺩﻻ ﻤﻥ ﺍﻟﺴﻤﺎﺡ ﻟﻠﻤﺴﺘﺨﺩﻡ ﺒﻜﺘﺎﺒﺔ ﺭﻗـﻡ‬
‫ﺍﻟﺩﻭﻟﺔ‪ ..‬ﺴﺄﺘﺭﻙ ﻟﻙ ﻓﻌل ﻫﺫﺍ ﺒﻨﻔﺴﻙ‪ ،‬ﻓﻘﺩ ﻓﻌﻠﻨﺎﻩ ﻤﻥ ﻗﺒل‪.‬‬
‫‪ -٦‬ﺍﺴﺘﺨﺩﺍﻡ ﻤﺭﺒﻊ ﻨﺹ ﻤﻘﻨﻥ ‪ MaskedTextBox‬ﻻﺴﺘﻘﺒﺎل ﺭﻗﻡ ﺍﻟﻬـﺎﺘﻑ ﺒﺎﻟـﺼﻴﻐﺔ‬
‫ﺍﻟﺼﺤﻴﺤﺔ )ﺭﺍﺠﻊ ﻤﺭﺠﻊ ﺒﺭﻤﺠﺔ ﺍﻟﻭﻴﻨﺩﻭﺯ(‪.‬‬
‫ﻻﺤﻅ ﺃﻨﻙ ﻻ ﺘﺤﺘﺎﺝ ﺇﻟﻰ ﺤﻔﻅ ﺍﻟﺘﻐﻴﻴﺭﺍﺕ ﺍﻟﺘﻲ ﺘﺤﺩﺙ ﻓﻲ ﺴﺠﻼﺕ ﺠﺩﻭل ﺍﻟﻌﺭﺽ‪ ،‬ﻷﻨﻬﺎ‬
‫ﺘﺤﻔﻅ ﺘﻠﻘﺎﺌﻴﺎ ﺒﺴﺒﺏ ﺭﺒﻁﻪ ﺒﻤﺼﺩﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪.‬‬
‫ﻭﺍﻟﻤﻌﺎﻤل ﺍﻟﺜﺎﻨﻲ ‪ e‬ﻟﻬﺫﺍ ﺍﻟﺤﺩﺙ ﻤﻥ ﺍﻟﻨﻭﻉ ‪ DataRepeaterItemValueEventArgs‬ﻜﻤـﺎ‬
‫ﻓﻲ ﺍﻟﺤﺩﺙ ‪.ItemValueNeeded‬‬

‫ﻫل ﺍﻟﻌﻨﺼﺭ ﺍﻟﺤﺎﻟﻲ ﻗﺫﺭ ‪:IsCurrentItemDirty‬‬


‫ﺘﻌﻴﺩ ‪ True‬ﺇﺫﺍ ﻜﺎﻥ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻗﺩ ﺃﺠﺭﻯ ﺘﻌﺩﻴﻼﺕ ﻋﻠﻰ ﺍﻟـﺴﺠل ﺍﻟﺤـﺎﻟﻲ ﻓـﻲ ﻤﻜـﺭﺭ‬
‫ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﺩﻭﻥ ﺃﻥ ﺘﺤﻔﻅ ﺒﻌﺩ ﻓﻲ ﻤﺼﺩﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ..‬ﻴﺤﺩﺙ ﻫﺫﺍ ﺇﺫﺍ ﻏﻴﺭ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻗﻴﻤـﺔ‬
‫ﺇﺤﺩﻯ ﺍﻷﺩﻭﺍﺕ ﺩﻭﻥ ﺃﻥ ﻴﻐﺎﺩﺭﻫﺎ‪.‬‬
‫‪٣٣‬‬
‫ﺘﻡ ﺤﺫﻑ ﺍﻟﻌﻨﺼﺭ ‪:ItemsRemoved‬‬
‫ﻴﻨﻁﻠﻕ ﻫﺫﺍ ﺍﻟﺤﺩﺙ ﺒﻌﺩ ﺤﺫﻑ ﻋﻨﺼﺭ ﻤﻥ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﻟﻴﺘﻴﺢ ﻟـﻙ ﺤـﺫﻑ ﺍﻟﻌﻨـﺼﺭ‬
‫ﺍﻟﻤﻨﺎﻅﺭ ﻟﻪ ﻤﻥ ﻤﺼﺩﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ..‬ﻭﺍﻟﻤﻌﺎﻤـل ﺍﻟﺜـﺎﻨﻲ ‪ e‬ﻟﻬـﺫﺍ ﺍﻟﺤـﺩﺙ ﻤـﻥ ﺍﻟﻨـﻭﻉ‬
‫‪ ،DataRepeaterAddRemoveItemsEventArgs‬ﻭﻗﺩ ﺴﺒﻕ ﺃﻥ ﺘﻌﺭﻓﻨﺎ ﻋﻠﻴﻪ‪ ..‬ﻭﻗﺩ‬
‫ﺍﺴﺘﺨﺩﻤﻨﺎ ﻫﺫﺍ ﺍﻟﺤﺩﺙ ﻓﻲ ﺍﻟﻤﺸﺭﻭﻉ ‪ VirtualRepeater‬ﻟﺤﺫﻑ ﺍﻟﻤﺅﻟﻑ ﻤـﻥ ﺠـﺩﻭل‬
‫ﺍﻟﻤﺅﻟﻔﻴﻥ ﻜﺎﻟﺘﺎﻟﻲ‪:‬‬
‫)‪BooksDataSet.Authors.Rows.RemoveAt(e.ItemIndex‬‬
‫ﻻﺤﻅ ﺃﻨﻨﺎ ﻻ ﻨﺤﺘﺎﺝ ﻋﻠﻰ ﺤﺫﻑ ﻜﺘﺏ ﺍﻟﻤﺅﻟﻑ ﻭﻟﻥ ﺘﺤﺩﺙ ﺃﻴﺔ ﺃﺨﻁﺎﺀ ﻟﻬﺫﺍ‪ ..‬ﺍﻟﺴﺒﺏ ﻓـﻲ‬
‫ﻫﺫﺍ ﺃﻨﻨﺎ ﻋﺭﻓﻨﺎ ﻗﻴﺩ ﺍﻟﻤﻔﺘﺎﺡ ﺍﻟﻔﺭﻋﻲ ﺍﻟﺘﺎﻟﻲ ﻓﻲ ﺤﺩﺙ ﺘﺤﻤﻴل ﺍﻟﻨﻤﻭﺫﺝ‪:‬‬
‫(‪Dim Fkc As New ForeignKeyConstraint‬‬
‫‪BooksDataSet.Authors.IDColumn,‬‬
‫)‪BooksDataSet.Books.AuthorIDColumn‬‬
‫‪Fkc.UpdateRule = Rule.Cascade‬‬
‫‪Fkc.AcceptRejectRule = Rule.Cascade‬‬
‫‪Fkc.DeleteRule = Rule.Cascade‬‬
‫)‪BooksDataSet.Books.Constraints.Add(Fkc‬‬
‫ﻜﻤﺎ ﺘﺭﻯ‪ ،‬ﻓﻘﺩ ﻋﺭﻓﻨﺎ ﻗﺎﻋﺩﺓ ﺍﻟﺤﺫﻑ ﺍﻟﻤﺘﺘﺎﻟﻲ‪ ،‬ﻟﺤﺫﻑ ﻜﺘﺏ ﺍﻟﻤﺅﻟﻑ ﺘﻠﻘﺎﺌﻴﺎ ﺒﻤﺠﺭﺩ ﺤـﺫﻑ‬
‫ﺍﻟﻤﺅﻟﻑ ﻨﻔﺴﻪ‪ ،‬ﻭﻫﺫﺍ ﻴﻤﻨﻊ ﺤﺩﻭﺙ ﺃﻴﺔ ﺃﺨﻁﺎﺀ‪ ،‬ﻭﻴﻭﻓﺭ ﻋﻠﻴﻨﺎ ﻜﺘﺎﺒﺔ ﻜـﻭﺩ ﺍﻟﺤـﺫﻑ‪ ..‬ﻜﻤـﺎ‬
‫ﻋﺭﻓﻨﺎ ﻗﺎﻋﺩﺓ ﺍﻟﺘﺤﺩﻴﺙ ﺍﻟﻤﺘﺘﺎﻟﻲ ﺃﻴﻀﺎ ﻟﻤﻨﻊ ﺃﻴﺔ ﻤﺸﻜﻠﺔ ﻋﻨﺩ ﺤﻔﻅ ﺒﻴﺎﻨﺎﺕ ﺍﻟﻤﺅﻟﻑ ﺍﻟﺠﺩﻴـﺩ‬
‫ﻭﺘﻐﻴﺭ ﺭﻗﻤﻪ ﺍﻟﺘﻠﻘﺎﺌﻲ‪ ..‬ﻭﺍﻟﺤﻘﻴﻘﺔ ﺃﻥ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻴﺠﺏ ﺃﻻ ﻴﺩﺨل ﺍﻟﻜﺘﺏ ﻗﺒل ﺤﻔﻅ ﺍﻟﻤﺴﺘﺨﺩﻡ‪،‬‬
‫ﻭﺇﻻ ﻓﻘﺩ ﻴﺨﺴﺭﻫﺎ ﺒﺴﺒﺏ ﻋﺩﻡ ﻗﺒﻭل ﻗﻴﻤﺔ ﺍﻟﺤﻘل ‪ AuthorID‬ﺒﻌﺩ ﺘﻐﻴﺭ ﺍﻟـﺭﻗﻡ ﺍﻟﺘﻠﻘـﺎﺌﻲ‬
‫ﻟﻠﻤﺅﻟﻑ‪.‬‬

‫‪٣٤‬‬
‫ﻓﺌﺔ ﻋﻨﺼﺭ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ ‪DataRepeaterItem Class‬‬

‫ﻫﺫﻩ ﺍﻟﻔﺌﺔ ﺘﺭﺙ ﻓﺌﺔ ﺍﻟﻠﻭﺤﺔ ‪ ،Panel‬ﻟﻬﺫﺍ ﺘﺴﺘﻁﻴﻊ ﺍﺤﺘﻭﺍﺀ ﺃﺩﻭﺍﺕ ﺃﺨﺭﻯ‪ ،‬ﻭﻫﻲ ﺘﻌﻤل ﻜﻌﻨﺼﺭ‬
‫ﻤﻭﻀﻭﻉ ﻋﻠﻰ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪ ،‬ﺴﻭﺍﺀ ﻜﺎﻥ ﺍﻟﻌﻨﺼﺭ ﺍﻟﻤﻌﺭﻭﺽ ﻓﻲ ﻭﻗﺕ ﺍﻟﺘﺼﻤﻴﻡ )ﺍﻟﻘﺎﻟﺏ(‪ ،‬ﺃﻭ‬
‫ﺍﻟﻌﻨﺎﺼﺭ ﺍﻟﻤﻨﺴﻭﺨﺔ ﻤﻨﻪ ﻓﻲ ﻭﻗﺕ ﺍﻟﺘﺸﻐﻴل‪.‬‬
‫ﻭﺇﻀﺎﻓﺔ ﺇﻟﻰ ﻤﺎ ﺘﺭﺜﻪ ﻤﻥ ﺨﺼﺎﺌﺹ ﺍﻷﺩﻭﺍﺕ ﺍﻟﺘﻘﻠﻴﺩﻴﺔ ﻭﺨﺼﺎﺌﺹ ﺍﻷﺩﺍﺓ ﺍﻟﺤﺎﻭﻴﺔ ﻭﺨـﺼﺎﺌﺹ‬
‫ﺍﻟﻠﻭﺤﺔ‪ ،‬ﺘﻤﺘﻠﻙ ﻫﺫﻩ ﺍﻟﻔﺌﺔ ﺍﻟﺨﺼﺎﺌﺹ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬

‫ﻫل ﻫﻭ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺤﺎﻟﻲ ‪:IsCurrent‬‬


‫ﺘﻌﻴﺩ ‪ True‬ﺇﺫﺍ ﻜﺎﻥ ﻫﺫﺍ ﺍﻟﻌﻨﺼﺭ ﻫﻭ ﺍﻟﻌﻨﺼﺭ ﺍﻟﺤﺎﻟﻲ )ﺍﻟﻤﺤﺩﺩ( ﻓﻲ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪.‬‬

‫ﻫل ﻫﻭ ﻗﺫﺭ ‪:IsDirty‬‬


‫ﺘﻌﻴﺩ ‪ True‬ﺇﺫﺍ ﻜﺎﻥ ﺍﻟﻤﺴﺘﺨﺩﻡ ﻗﺩ ﻏﻴﺭ ﺒﻌﺽ ﺒﻴﺎﻨﺎﺕ ﺍﻟﻌﻨﺼﺭ ﻭﻟﻡ ﺘﺤﻔﻅ ﺍﻟﺘﻐﻴﻴﺭﺍﺕ ﺒﻌـﺩ‬
‫ﻓﻲ ﻤﺼﺩﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪.‬‬

‫ﺭﻗﻡ ﺍﻟﻌﻨﺼﺭ ‪:ItemIndex‬‬


‫ﺘﻌﻴﺩ ﺭﻗﻡ ﺍﻟﻌﻨﺼﺭ ﻓﻲ ﻤﻜﺭﺭ ﺍﻟﺒﻴﺎﻨﺎﺕ‪.‬‬

‫ﻭﺃﻫﻡ ﻤﺎ ﻴﻌﻨﻴﻨﺎ ﻫﻨﺎ‪ ،‬ﻫﻭ ﻜﻴﻔﻴﺔ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻷﺩﻭﺍﺕ ﺍﻟﻤﻭﻀﻭﻋﺔ ﻋﻠﻰ ﺍﻟﻌﻨﺼﺭ‪ ..‬ﻜﻤﺎ ﺫﻜﺭﻨﺎ ﻤﻥ‬
‫ﻗﺒل‪ ،‬ﻓﺈﻥ ﺍﻟﻌﻨﺼﺭ ﻫﻭ ﻟﻭﺤﺔ ‪ ،Panel‬ﻭﻫﺫﺍ ﻤﻌﻨﺎﻩ ﺃﻨﻪ ﺃﺩﺍﺓ ﺤﺎﻭﻴﺔ‪ ،‬ﻟﻬـﺫﺍ ﻴﻤﻜﻨـﻙ ﺍﺴـﺘﺨﺩﺍﻡ‬
‫ﺍﻟﺨﺎﺼﻴﺔ ‪ Controls‬ﻟﻠﺘﻌﺎﻤل ﻤﻊ ﺍﻷﺩﻭﺍﺕ ﺍﻟﻤﻭﻀﻭﻋﺔ ﻋﻠﻴﻪ ﺴﻭﺍﺀ ﺒﺄﺭﻗﺎﻤﻬـﺎ ﺃﻭ ﺒﺄﺴـﻤﺎﺌﻬﺎ‪..‬‬
‫ﻭﻴﻜﻭﻥ ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻷﺩﻭﺍﺕ ﺒﺄﺭﻗﺎﻤﻬﺎ ﻤﻨﺎﺴﺒﺎ ﺇﺫﺍ ﺃﺭﺩﺕ ﺍﻟﻤﺭﻭﺭ ﻋﺒﺭ ﻜل ﺍﻷﺩﻭﺍﺕ‪ ،‬ﺒﻴﻨﻤﺎ ﻴﻜﻭﻥ‬
‫ﺍﻟﺘﻌﺎﻤل ﻤﻊ ﺍﻷﺩﻭﺍﺕ ﺒﺄﺴﻤﺎﺌﻬﺎ ﺃﻜﺜﺭ ﻤﻼﺌﻤﺔ ﻟﻠﻜﻭﺩ ﺍﻟﺫﻱ ﻴﻘﺭﺃ ﻗﻴﻡ ﺍﻷﺩﻭﺍﺕ ﺃﻭ ﻴﻐﻴﺭﻫـﺎ‪ ،‬ﻷﻨـﻪ‬
‫‪٣٥‬‬
‫ﻴﺠﻌل ﺍﻟﻜﻭﺩ ﺃﻜﺜﺭ ﻭﻀﻭﺤﺎ ﻭﺴﻬﻭﻟﺔ‪ ..‬ﻻﺤﻅ ﺃﻥ ﺍﻻﺴﻡ ﺍﻟﺫﻱ ﺘﻤﻨﺤﻪ ﻟﻸﺩﺍﺓ ﻓﻲ ﻗﺎﻟﺏ ﺍﻟﻌﻨـﺼﺭ‬
‫ﻓﻲ ﻭﻗﺕ ﺍﻟﺘﺼﻤﻴﻡ‪ ،‬ﻫﻭ ﻨﻔﺴﻪ ﺍﻻﺴﻡ ﺍﻟﺫﻱ ﺴﺘﺴﺘﺨﺩﻤﻪ ﻟﻠﺘﻌﺎﻤل ﻤﻊ ﻨﺴﺨﺔ ﺍﻷﺩﺍﺓ ﺍﻟﻤﻭﻀﻭﻋﺔ ﻋﻠﻰ‬
‫ﺃﻱ ﻋﻨﺼﺭ‪ ..‬ﺍﻟﺴﺒﺏ ﻓﻲ ﻫﺫﺍ ﺃﻥ ﻜل ﻋﻨﺼﺭ ﻫﻭ ﻨﺴﺨﺔ ﻁﺒﻕ ﺍﻷﺼل ﻤﻥ ﺍﻟﻘﺎﻟﺏ‪ ،‬ﻭﻫﺫﺍ ﻤﻌﻨـﺎﻩ‬
‫ﺃﻥ ﻜل ﺃﺩﺍﺓ ﻤﻭﻀﻭﻋﺔ ﻋﻠﻴﻪ ﺘﺄﺨﺫ ﻨﻔﺱ ﺨﺼﺎﺌﺹ ﻨﺴﺨﺘﻬﺎ ﺍﻷﺼﻠﻴﺔ ﺍﻟﻤﻭﻀﻭﻋﺔ ﻋﻠﻰ ﺍﻟﻘﺎﻟـﺏ‬
‫ﺒﻤﺎ ﻓﻲ ﺫﻟﻙ ﺍﻻﺴﻡ‪ ..‬ﻭﻋﻠﻴﻙ ﺃﻻ ﺘﺭﺘﺒﻙ ﺒﻴﻥ ﺍﻻﺴﻡ ﺍﻟﻤﻭﻀﻭﻉ ﻓﻲ ﺍﻟﺨﺎﺼـﻴﺔ ‪ ،Name‬ﻭﺍﺴـﻡ‬
‫ﺍﻟﻤﺘﻐﻴﺭ ﺍﻟﺫﻱ ﻴﺸﻴﺭ ﺇﻟﻰ ﺍﻷﺩﺍﺓ‪ ..‬ﻤﺜﻼ‪ :‬ﺍﻟﻜﻭﺩ ﺍﻟﺘﺎﻟﻲ ﻴﻐﻴـﺭ ﻨـﺹ ﻤﺭﺒـﻊ ﺍﻟـﻨﺹ ﺍﻷﺼـﻠﻲ‬
‫ﺍﻟﻤﻭﻀﻭﻉ ﻋﻠﻰ ﺍﻟﻘﺎﻟﺏ‪:‬‬
‫"‪AuthorTextBox.Text = "Test‬‬
‫ﻭﻟﻥ ﻴﺅﺜﺭ ﻫﺫﺍ ﺍﻟﻜﻭﺩ ﻋﻠﻰ ﻨﺴﺦ ﻤﺭﺒﻊ ﺍﻟﻨﺹ ﺍﻟﻤﻭﻀﻭﻋﺔ ﻋﻠﻰ ﺍﻷﺩﻭﺍﺕ‪ ،‬ﺇﻻ ﺇﺫﺍ ﺍﺴﺘﺨﺩﻤﺘﻪ ﺒﻴﻥ‬
‫ﺍﻟﻭﺴﻴﻠﺘﻴﻥ ‪ BeginResetItemTemplate‬ﻭ ‪ EndResetItemTemplate‬ﻜﻤﺎ ﺃﻭﻀـﺤﻨﺎ‬
‫ﻤﻥ ﻗﺒل‪.‬‬
‫ﺃﻤﺎ ﺇﺫﺍ ﺃﺭﺩﺕ ﺘﻐﻴﻴﺭ ﺍﺴﻡ ﺍﻟﻤﺅﻟﻑ ﺍﻟﺤﺎﻟﻲ ﻓﻘﻁ‪ ،‬ﻓﻴﻤﻜﻨﻙ ﺍﺴﺘﺨﺩﺍﻡ ﺍﻟﻜﻭﺩ ﺍﻟﺘﺎﻟﻲ‪:‬‬
‫‪Dim Itm = DataRepeater1.CurrentItem‬‬
‫(‪Dim AutherTxtBx = CType‬‬
‫)‪Itm.Controls("AuthorTextBox"), TextBox‬‬
‫"‪AutherTxtBx.Text = "Test‬‬
‫ﻭﻗﺩ ﺍﺴﺘﺨﺩﻤﻨﺎ ﺍﻟﻜﻭﺩ ﺍﻟﺘﺎﻟﻲ ﻓﻲ ﺍﻟﻤﺸﺭﻭﻉ ‪ RepeaterItemColor‬ﻟﻌﺭﺽ ﻜﺘﺏ ﺍﻟﻤﺅﻟﻑ ﻓﻲ‬
‫ﺍﻟﻘﺎﺌﻤﺔ‪:‬‬
‫)"‪Dim BksLst As ListBox = Itm.Controls("BooksList‬‬
‫‪BksLst.DataSource = BooksView‬‬
‫"‪BksLst.DisplayMember = "Book‬‬
‫ﻜﻤﺎ ﺍﺴﺘﺨﺩﻤﻨﺎ ﺍﻟﻜﻭﺩ ﺍﻟﺘﺎﻟﻲ ﻓﻲ ﺤﺩﺙ ﻀﻐﻁ ﺯﺭ ﻋﺭﺽ ﻜﺘﺏ ﺍﻟﻤﺅﻟﻑ ﺍﻟﻤﻭﻀﻭﻉ ﻋﻠﻰ ﻗﺎﻟـﺏ‬
‫ﺍﻟﻌﻨﺼﺭ‪:‬‬
‫‪Dim Itm = DataRepeater1.CurrentItem‬‬
‫ﺍﻟﺤﺼﻭل ﻋﻠﻰ ﻜﺎﺌﻥ ﻋﺭﺽ ﺼﻑ ﺍﻟﻤﺅﻟﻑ ﺍﻟﺤﺎﻟﻲ '‬
‫)‪Dim Rv = BooksDataSet.Authors.DefaultView(Itm.ItemIndex‬‬
‫‪٣٦‬‬
‫ﺍﻟﺤﺼﻭل ﻋﻠﻰ ﻜﺎﺌﻥ ﻋﺭﺽ ﻴﺤﺘﻭﻱ ﻋﻠﻰ ﻜﺘﺏ ﻫﺫﺍ ﺍﻟﻤﺅﻟﻑ '‬
‫)‪Dim Rl = BooksDataSet.Authors.ChildRelations(0‬‬
‫)‪Dim BooksView = Rv.CreateChildView(Rl‬‬
‫ﻋﺭﺽ ﺍﻟﻜﺘﺏ ﻓﻲ ﺠﺩﻭل ﺍﻟﻌﺭﺽ '‬
‫‪FrmBooks.GrdBooks.DataSource = BooksView‬‬
‫& " ﻜﺘﺏ" = ‪FrmBooks.Text‬‬
‫‪Itm.Controls("AuthorTextBox").Text‬‬
‫) (‪FrmBooks.ShowDialog‬‬
‫ﻻﺤﻅ ﺃﻥ ﻜل ﻨﺴﺦ ﺍﻟﺯﺭ ﺘﺴﺘﺠﻴﺏ ﺃﻴﻀﺎ ﻟﻬﺫﺍ ﺍﻟﺤﺩﺙ‪ ..‬ﺃﻟﻡ ﺃﻗل ﻟﻙ ﺇﻥ ﻨـﺴﺨﺔ ﺍﻷﺩﺍﺓ ﻤﻤﺎﺜﻠـﺔ‬
‫ﻟﻸﺩﺍﺓ ﺍﻷﺼﻠﻴﺔ ﻓﻲ ﻜل ﺸﻲﺀ؟‪ ..‬ﻫﺫﺍ ﻴﺸﻤل ﺍﻹﺠﺭﺍﺀﺍﺕ ﺍﻟﻤـﺴﺘﺠﻴﺒﺔ ﻷﺤـﺩﺍﺙ ﺍﻷﺩﺍﺓ‪ ،‬ﻟﻬـﺫﺍ‬
‫ﺘﺴﺘﻁﻴﻊ ﺒﺭﻤﺠﺔ ﺃﺤﺩﺍﺙ ﺍﻷﺩﻭﺍﺕ ﺍﻟﻤﻭﻀﻭﻋﺔ ﻋﻠﻰ ﻗﺎﻟﺏ ﺍﻟﻌﻨﺼﺭ ﻤﺒﺎﺸﺭﺓ‪ ،‬ﻭﺴﺘﻜﻭﻥ ﺒﺫﻟﻙ ﻗـﺩ‬
‫ﺒﺭﻤﺠﺕ ﺃﺤﺩﺍﺙ ﻜل ﺍﻟﻨﺴﺦ ﺍﻟﻤﻨﺴﻭﺨﺔ ﻤﻥ ﻫﺫﻩ ﺍﻷﺩﺍﺓ‪.‬‬

‫‪٣٧‬‬
‫ﺍﻟﻨﺠﺩﺓ‪ ..‬ﻨﺤﻥ ﻨﺨﺘﻨﻕ ﻓﻲ ﺍﻟﻔﻘﺎﻋﺔ!!‬

‫ﻤﻥ ﻭﺠﻬﺔ ﻨﻅﺭﻱ‪ ،‬ﻜل ﻤﺸﺎﻜﻠﻨﺎ ﺍﻟﺤﺎﻟﻴﺔ ﻓﻲ ﻤﺼﺭ‪ ،‬ﻨﺎﺒﻌﺔ ﻤﻥ ﺃﻥ ﺍﻟـﻭﻁﻥ ﻴـﺘﻘﻠﺹ‪ ،‬ﻭﺍﻟﺒـﺸﺭ‬
‫ﻴﺘﺯﺍﻴﺩﻭﻥ‪ ،‬ﻭﻜل ﺸﻲﺀ ﻨﻔﻌﻠﻪ ﻴﺴﺘﻨﺯﻑ ﻫﺫﺍ ﺍﻟﻭﻁﻥ ﺃﻜﺜﺭ ﻭﺃﻜﺜﺭ )ﺩﻋﻨﺎ ﻻ ﻨﺘﻜﻠﻡ ﺍﻵﻥ ﻋـﻥ ﺩﻭﺭ‬
‫ﺍﻟﻌﻠﻤﺎﻨﻴﻴﻥ ﺍﻟﺫﻴﻥ ﻴﺤﻜﻤﻭﻨﻨﺎ ﻓﻲ ﻫﺫﺍ‪ ،‬ﻭﺍﻟﺫﻴﻥ ﺘﺭﻜﻭﺍ ﻜل ﻤﺴﺌﻭﻟﻴﺎﺕ ﻭﻅﺎﺌﻔﻬﻡ ﻭﺘﻔﺭﻏـﻭﺍ ﺒﻜﺎﻤـل‬
‫ﻗﻭﺍﻫﻡ ﺍﻟﻌﻘﻠﻴﺔ ﺍﻟﻤﺸﻜﻭﻙ ﻓﻴﻬﺎ‪ ،‬ﻟﺘﺩﻤﻴﺭ ﺍﻷﺨﻼﻕ ﻭﺍﻟﻘﻴﻡ ﻭﺍﻷﻋﺭﺍﻑ ﺍﻻﺠﺘﻤﺎﻋﻴﺔ(!‬
‫ﻤﺜﻼ‪ :‬ﻨﻅﺎﻡ ﺍﻟﺘﻌﻠﻴﻡ ﻋﻨﺩﻨﺎ ﻴﺄﺨﺫ ﻭﻻ ﻴﻌﻁﻲ‪ ،‬ﻭﺘﻨﻔﻕ ﻋﻠﻴﻪ ﺍﻟﺩﻭﻟﺔ ﻤﻠﻴﺎﺭﺍﺕ ﺍﻟﺠﻨﻴﻬﺎﺕ ﺴﻨﻭﻴﺎ ﻤـﻥ‬
‫ﺃﺠل ﺃﻫﺩﺍﻑ ﻨﺒﻴﻠﺔ‪ ،‬ﻫﻲ ﺘﻌﺫﻴﺏ ﺍﻷﺴﺭﺓ ﻭﺍﻟﻁﺎﻟﺏ ﻭﺍﻟﻤﺩﺭﺱ‪ ،‬ﻭﺇﺸﺎﻋﺔ ﺍﻟﻤﺭﺍﻫﻘـﺔ ﻭﺍﻟﻔﺎﺤـﺸﺔ‪،‬‬
‫ﻭﺘﺨﺭﻴﺞ ﺃﻨﺼﺎﻑ ﺍﻟﻤﺘﺨﺼﺼﻴﻥ ﻤﺘﺩﻨﻲ ﺍﻟﺜﻘﺎﻓﺔ ﻭﺍﻟﺫﺍﺌﻘﺔ‪ ،‬ﺍﻟﻌﺎﻁﻠﻴﻥ ﻋﻥ ﺍﻟﻌﻤل ﻭﺍﻟﺯﻭﺍﺝ ﻭﺍﻷﻤل‬
‫ﻓﻲ ﺍﻟﻐﺩ!‬
‫ﻭﻴﻨﻌﻜﺱ ﻜل ﻫﺫﺍ ﻋﻠﻰ ﺠﻤﻴﻊ ﺍﻟﻘﻁﺎﻋﺎﺕ‪ ،‬ﺤﺘﻰ ﺍﻟﻤﺜﻘﻔﻴﻥ ﻭﺃﺼﺤﺎﺏ ﺍﻟﺩﺭﺠﺎﺕ ﺍﻟﻌﻠﻤﻴﺔ ﺍﻟﺭﻓﻴﻌﺔ‪..‬‬
‫ﻤﺜﻼ‪ :‬ﺒﻴﻨﻤﺎ ﻴﺤﻤل ﺜﻠﺙ ﺍﻟﺸﻌﺏ ﺍﻟﻤﺼﺭﻱ ﺸﻬﺎﺩﺍﺕ ﺠﺎﻤﻌﻴﺔ‪ ،‬ﺘﺯﺩﺍﺩ ﺍﻟﺜﻘﺎﻓﺔ ﻭﺴﻭﻕ ﺍﻟﻨﺸﺭ ﺍﻨﻬﻴﺎﺭﺍ‬
‫ﻴﻭﻤﺎ ﻋﻥ ﻴﻭﻡ‪ ،‬ﻓﻬﺫﻩ ﺍﻟﺸﻬﺎﺩﺍﺕ ﻟﻡ ﺘﻌﻠﻡ ﺃﺤﺩﺍ ﺤﺏ ﺍﻟﻘﺭﺍﺀﺓ ﻭﺍﻟﻤﻌﺭﻓﺔ ﻭﺍﻟﺘﻔﻜﻴﺭ ﻭﺍﻟﺘﺴﺎﺅل!‬
‫ﺤﺘﻰ ﺃﺴﺎﺘﺫﺓ ﺍﻟﺠﺎﻤﻌﺔ ﺃﻀﺭﺒﻭﺍ ﻹﺠﺒﺎﺭ ﺍﻟﺤﻜﻭﻤﺔ ﻋﻠﻰ ﺯﻴﺎﺩﺓ ﺭﻭﺍﺘﺒﻬﻡ‪ ،‬ﻟﻴﻨـﻀﻤﻭﺍ ﺒﻬـﺫﺍ ﺇﻟـﻰ‬
‫ﺍﻷﻁﺒﺎﺀ ﻭﺍﻟﺼﻴﺎﺩﻟﺔ ﻭﺍﻟﺯﺭﺍﻋﻴﻴﻥ ﻭﻤﻭﻅﻔﻲ ﺍﻟﻀﺭﺍﺌﺏ‪ ،‬ﻭﻋﻤﺎل ﺍﻟﻐﺯل ﻭﺍﻟﻨﺴﻴﺞ‪ ....‬ﺇﻟﺦ‪..‬‬
‫ﻟﻜﻥ ﺯﻴﺎﺩﺓ ﺃﺠﻭﺭ ﺃﻱ ﻤﻥ ﻫﺅﻻﺀ ﻟﻥ ﺘﺤل ﻤﺸﺎﻜﻠﻬﻡ‪ ،‬ﻓﺎﻟﺤﻜﻭﻤﺔ ﺘﺭﻓﻊ ﺍﻟﻀﺭﺍﺌﺏ ﻭﺍﻷﺴﻌﺎﺭ ﻟﺘﺩﻓﻊ‬
‫ﺍﻟﺯﻴﺎﺩﺓ ﻓﻲ ﺭﻭﺍﺘﺒﻬﻡ‪ ،‬ﻓﺘﻘﻁﻊ ﻤﻥ ﻫﻨﺎ ﻟﺘﺭﻗﻊ ﻫﻨﺎﻙ!‬
‫ﻭﺍﻟﺴﺒﺏ ﺒﺒﺴﺎﻁﺔ ﺃﻨﻨﺎ ﺠﻤﻴﻌﺎ ﻻ ﻨﻀﻴﻑ ﻟﻠﻭﻁﻥ ﺸﻴﺌﺎ ﻤﻘﺎﺒل ﻫﺫﻩ ﺍﻟﺭﻭﺍﺘﺏ‪ ،‬ﻭﻻ ﺃﺤﺩ ﻴﺴﺘﻔﻴﺩ ﺸﻴﺌﺎ‬
‫ﻤﻤﺎ ﻴﺘﻌﻠﻤﻪ‪ ،‬ﻭﻻ ﺃﻱ ﺸﻲﺀ ﻨﻌﻤﻠﻪ ﻴﻀﻴﻑ ﺇﻟﻰ ﺭﺼﻴﺩﻨﺎ ﻭﺭﺼﻴﺩ ﺃﺠﻴﺎﻟﻨﺎ ﺍﻟﻘﺎﺩﻤﺔ!‬
‫ﻨﺤﻥ ﻓﻲ ﺍﻟﺤﻘﻴﻘﺔ ﻤﺠﺭﺩ ﺴﻤﺎﺴﺭﺓ ﻭﻤﻘﺩﻤﻲ ﺨﺩﻤﺎﺕ‪ ،‬ﻨﻌﻤل ﻋﻠﻰ ﺍﺴﺘﻴﺭﺍﺩ ﻭﺘﻭﺯﻴﻊ ﻋﻠﻭﻡ ﻭﺜﻘﺎﻓﺎﺕ‬
‫ﻭﻤﻨﺘﺠﺎﺕ ﺍﻟﻐﻴﺭ‪ ،‬ﻭﻻ ﻨﻨﺘﺞ ﺸﻴﺌﺎ ﻴﺫﻜﺭ!‬
‫ﺤﺘﻰ ﺍﻷﺭﺽ ﺍﻟﺯﺭﺍﻋﻴﺔ ﺍﻟﺘﻲ ﻫﻲ ﺁﺨﺭ ﻤﺎ ﺘﺒﻘﻰ ﻟﻨﺎ‪ ،‬ﻨﺩﻤﺭﻫﺎ ﻭﻨﺠﺭﻓﻬﺎ ﻭﻨﺒﻨﻲ ﻋﻠﻴﻬﺎ ﻭﻨـﺴﻤﻤﻬﺎ‬
‫ﺒﻤﻴﺎﻩ ﺍﻟﺼﺭﻑ‪ ،‬ﺘﺎﺭﻜﻴﻥ ‪ %٩٦‬ﻤﻥ ﺃﺭﺹ ﻤﺼﺭ ﺼﺤﺭﺍﺀ ﺠﺭﺩﺍﺀ‪ ،‬ﻟﻨﺘﻜﺩﺱ ﻓﻲ ‪ %٤‬ﻭﻨﻅـل‬
‫‪٣٨‬‬
‫ﻨﻠﻌﻥ ﺍﻟﺯﺤﺎﻡ ﻭﺍﻟﺘﻠﻭﺙ ﻭﻤﺸﻜﻠﺔ ﺍﻟﺴﻜﻥ‪ ،‬ﻭﺍﺭﺘﻔﺎﻉ ﺴﻌﺭ ﺍﻟﻐﺫﺍﺀ ﻭﺍﻟﻠﺤـﻭﻡ )ﺒﺎﻟﻤﻨﺎﺴـﺒﺔ‪ :‬ﻤﻭﺠـﺔ‬
‫ﺍﻻﺭﺘﻔﺎﻉ ﺍﻷﺨﻴﺭﺓ ﻓﻲ ﺃﺴﻌﺎﺭ ﺍﻟﻠﺤﻭﻡ ﻤﻨﻁﻘﻴﺔ‪ ،‬ﻓﻘﺩ ﺸـﻬﺩﺕ ﺍﻷﺭﺽ ﺍﻟﺯﺭﺍﻋﻴـﺔ ﻓـﻲ ﺠﻤﻴـﻊ‬
‫ﺍﻟﻤﺤﺎﻓﻅﺎﺕ ﻫﺠﻭﻤﺎ ﻜﺒﻴﺭﺍ ﻟﺒﻨﺎﺀ ﺍﻟﻤﺯﻴﺩ ﻤﻥ ﺍﻟﻤﺴﺎﻜﻥ ﻓﻲ ﺍﻟﺸﻬﻭﺭ ﺍﻷﺨﻴﺭﺓ‪ ،‬ﻭﻫﺫﺍ ﻴﻌﻨﻲ ﺘﻘﻠـﺹ‬
‫ﺍﻟﻤﺴﺎﺤﺔ ﺍﻟﺘﻲ ﻜﺎﻨﺕ ﺘﺯﺭﻉ ﺒﺎﻟﺒﺭﺴﻴﻡ ﻟﺘﺄﻜﻠﻪ ﺍﻟﻤﺎﺸﻴﺔ‪ ،‬ﻤﻤﺎ ﻋﻤل ﻋﻠﻰ ﺯﻴﺎﺩﺓ ﺃﺴـﻌﺎﺭ ﺍﻷﻋـﻼﻑ‬
‫ﻭﺒﺎﻟﺘﺎﻟﻲ ﺃﺴﻌﺎﺭ ﺍﻟﻠﺤﻭﻡ(!!‬
‫ﻭﻟﻴﺱ ﻫﺫﺍ ﻜل ﺸﻲﺀ‪ ..‬ﻓﺎﻟﻴﺄﺱ ﻭﺍﻟﻔﺭﺍﻍ ﻭﺍﻟﺠﻬل‪ ،‬ﻭﺍﻟﺒﺤﺙ ﻋﻥ ﺃﻁﺭﺍﻑ ﺃﺨﺭﻯ ﻻﺘﻬﺎﻤﻬﺎ ﺒﺄﻨﻬـﺎ‬
‫ﺴﺒﺏ ﻜل ﻤﺸﺎﻜل ﺍﻟﻤﺠﺘﻤﻊ‪ ،‬ﻫﻭ ﺴﺒﺏ ﺍﻻﺴﺘﻘﻁﺎﺏ ﺍﻟﺤـﺎﺩ ﻭﺍﻟـﺼﺭﺍﻋﺎﺕ ﻭﺍﻟﻌﻨـﻑ ﺍﻟﻔـﺭﺩﻱ‬
‫ﻭﺍﻻﺠﺘﻤﺎﻋﻲ ﺍﻟﺫﻱ ﺒﺩﺃﻨﺎ ﻨﺭﺍﻩ ﻓﻲ ﻤﺼﺭ ﻓﻲ ﺍﻟﺴﻨﻭﺍﺕ ﺍﻷﺨﻴﺭﺓ‪ ..‬ﻫـﺫﻩ ﺃﻋـﺭﺍﺽ ﻤﺠﺘﻤﻌـﺎﺕ‬
‫ﺍﻟﺯﺤﺎﻡ‪ ،‬ﺍﻟﺘﻲ ﺘﺘﻜﺎﻟﺏ ﻓﻴﻬﺎ ﺍﻟﻜﺜﺭﺓ ﻋﻠﻰ ﺍﻟﻤﻭﺍﺭﺩ ﺍﻟﻘﻠﻴﻠﺔ ﺍﻟﻤﺘﺎﺤـﺔ‪ ..‬ﻟﻬـﺫﺍ ﻅﻬـﺭﺕ ﺍﻟـﺸﺭﻭﺥ‬
‫ﻭﺍﻟﺘﺼﺩﻋﺎﺕ ﻓﻲ ﺍﻟﻤﺠﺘﻤﻊ ﺍﻟﻤﺼﺭﻱ ﻭﺍﻟﻤﺠﺘﻤﻌﺎﺕ ﺍﻟﻌﺭﺒﻴﺔ‪ ،‬ﻭﻜﺜﺭ ﺍﻟﺠﺩل ﻓﻲ ﺍﻟﻘﻀﺎﻴﺎ ﺍﻟﻌﻨﺼﺭﻴﺔ‬
‫ﺍﻟﺘﻲ ﻻ ﺘﻔﻴﺩ ﻤﻥ ﻗﺒﻴل )ﻤﺴﻠﻡ ﻭﻤﺴﻴﺤﻲ‪ ،‬ﺴﻨﻲ ﻭﺸﻴﻌﻲ‪ ،‬ﺇﺴﻼﻤﻲ ﻭﻋﻠﻤﺎﻨﻲ‪ ،‬ﻋﺭﺒـﻲ ﻭﻜـﺭﺩﻱ‪،‬‬
‫ﻗﻭﻤﻲ ﻭﻭﻁﻨﻲ‪ ...‬ﺇﻟﺦ(‪ ،‬ﺩﻭﻥ ﺃﻥ ﻴﻌﻲ ﺍﻟﺠﻤﻴﻊ ﺃﻥ ﺍﻟﺴﻔﻴﻨﺔ ﺘﻐﺭﻕ ﺒﻨﺎ ﺠﻤﻴﻌﺎ‪ ،‬ﻭﻟﻥ ﻴﺘﺒﻘﻰ ﻷﺤﺩ ﻤﺎ‬
‫ﻴﻜﺴﺒﻪ ﺇﻥ ﻓﺎﺯ ﻓﻲ ﻫﺫﻩ ﺍﻟﺼﺭﺍﻋﺎﺕ ﺍﻟﻭﻫﻤﻴﺔ‪ ،‬ﺇﻥ ﻟﻡ ﻨﻌﻤل ﺠﻤﻴﻌﺎ ﻟﺼﻨﻊ ﻤﺴﺘﻘﺒل ﺃﻓﻀل ﻟﻠﻭﻁﻥ‬
‫ﺍﻟﺫﻱ ﻨﻌﻴﺵ ﻓﻴﻪ‪ ..‬ﺇﻥ ﺍﻷﻤﺭﺍﺽ ﺍﻟﺘﻲ ﺘﺼﻴﺒﻨﺎ ﻤﻥ ﺍﻟﻁﻌﺎﻡ ﻭﺍﻟﻤﺎﺀ ﺍﻟﻤﻠﻭﺜﻴﻥ ﻻ ﺘﻔﺭﻕ ﺒﻴﻥ ﺩﻴﻥ ﺃﻭ‬
‫ﻤﺫﻫﺏ ﺃﻭ ﺍﻨﺘﻤﺎﺀ ﺤﺯﺒﻲ‪ ،‬ﻭﺍﻟﺒﻁﺎﻟﺔ ﻭﺍﻟﻔﻘﺭ ﻭﺍﻟﻐﻼﺀ ﻭﺍﻟﻌﺸﻭﺍﺌﻴﺔ ﻭﺍﻟﻘﺒﺢ ﺘﻠﺘﻬﻤﻨﺎ ﺠﻤﻴﻌﺎ ﻤﻬﻤﺎ ﻜﺎﻥ‬
‫ﻟﻭﻨﻨﺎ ﺃﻭ ﻤﻌﺘﻘﺩﻨﺎ ﺃﻭ ﺘﻔﻜﻴﺭﻨﺎ‪.‬‬
‫ﻟﻬﺫﺍ ﺭﺠﺎﺀ‪ ،‬ﺩﻋﻭﻨﺎ ﻨﺘﻭﻗﻑ ﻋﻥ ﺍﻟﺼﺭﺍﺥ ﻭﺍﻟﺸﻜﻭﻯ ﻟﻠﺤﻅﺔ‪ ،‬ﻭﻨﺒﺩﺃ ﻓﻲ ﺍﻟﺘﻔﻜﻴﺭ ﺒﻁﺭﻴﻘﺔ ﺃﺨﺭﻯ‪..‬‬
‫ﻓﻼ ﺃﺤﺩ ﻤﻨﺎ ﺴﻴﺤﺼل ﻋﻠﻰ ﺸﻲﺀ ﻤﻬﻤﺎ ﻓﻌل ﻭﻤﻬﻤﺎ ﺼﺭﺥ ﻭﻤﻬﻤﺎ ﻜﺎﻥ ﻋﺒﻘﺭﻴـﺎ‪ ،‬ﻤـﺎ ﺩﻤﻨـﺎ‬
‫ﻤﺤﺒﻭﺴﻴﻥ ﻓﻲ ﻫﺫﻩ ﺍﻟﻔﻘﺎﻋﺔ‪ ،‬ﻭﻨﺘﺼﺎﺭﻉ ﻋﻠﻰ ﺍﻟﺘﻘﺎﻁ ﺃﻨﻔﺎﺴﻨﺎ ﻓﻲ ﻫﻭﺍﺌﻬﺎ ﺍﻟﻤﺅﻜﺴﺩ!‬
‫ﻴﺠﺏ ﺃﻭﻻ ﺃﻥ ﻨﻔﻜﺭ ﻤﻥ ﺨﺎﺭﺝ ﺍﻟﻔﻘﺎﻋﺔ‪ ،‬ﻭﺃﻥ ﻨﺤﻁﻡ ﺼﻨﺩﻭﻕ ﺍﻟﻘﻨﺎﻋﺔ ﺒﺎﻟﻭﺍﻗﻊ‪ ،‬ﻭﻴﺒﺩﺃ ﻜل ﻤﻨﺎ ﻓﻲ‬
‫ﺇﻀﺎﻓﺔ ﺸﻲﺀ‪ ،‬ﻗﺒل ﺃﻥ ﻴﻁﺎﻟﺏ ﺒﺄﺨﺫ ﺸﻲﺀ‪ ..‬ﺇﻥ ﺃﻤﺎﻤﻨـﺎ ﻤﻼﻴـﻴﻥ ﺍﻷﻓﺩﻨـﺔ ﻤـﻥ ﺍﻟـﺼﺤﺭﺍﺀ‬
‫ﻟﻨﺴﺘﺼﻠﺤﻬﺎ ﻭﻨﺯﺭﻋﻬﺎ ﻭﻨﺒﻨﻲ ﻓﻴﻬﺎ ﺍﻟﻤﺩﻥ ﺍﻟﺼﻨﺎﻋﻴﺔ ﻭﺍﻟﻤﺠﻤﻌﺎﺕ ﺍﻟـﺴﻜﻨﻴﺔ‪ ،‬ﻭﻤﻼﻴـﻴﻥ ﺍﻟﻜﺘـﺏ‬
‫ﺍﻟﻌﻠﻤﻴﺔ ﻟﻨﺘﺭﺠﻤﻬﺎ‪ ،‬ﻭﻤﻼﻴﻴﻥ ﺍﻷﻓﻜﺎﺭ ﻟﻨﺒﺘﻜﺭﻫﺎ ﻭﻨﺄﺨﺫ ﻓﻴﻬﺎ ﺒﺭﺍﺀﺍﺕ ﺍﺨﺘـﺭﺍﻉ‪ ..‬ﻟﻘـﺩ ﺘـﻀﺎﻋﻑ‬
‫‪٣٩‬‬
‫ﺍﻟﺸﻌﺏ ﺍﻟﻤﺼﺭﻱ ‪ ١٢‬ﻤﺭﺓ ﻤﻨﺫ ﻓﺘﺢ ﻤﺼﺭ ﻤﻨﺫ ‪ ١٤‬ﻗﺭﻨﺎ‪ ،‬ﻭﻤﺎ ﺯﻟﻨﺎ ﻨﻌﻴﺵ ﻓﻲ ﻨﻔـﺱ ﺍﻟﺭﻗﻌـﺔ‬
‫ﺘﻘﺭﻴﺒﺎ‪ ..‬ﻭﻫﺫﺍ ﻤﻌﻨﺎﻩ ﺃﻨﻨﺎ ﻨﺨﺘﻨﻕ ﻤﻊ ﻓﻀﻼﺘﻨﺎ ﻓﻲ ﻨﻔﺱ ﺍﻟﺤﻴﺯ ﺍﻟﻀﻴﻕ ﻭﻻ ﻨﻜﻑ ﻋﻥ ﺍﻟﺼﺭﺍﺥ‪..‬‬
‫ﻭﻤﺎ ﻟﻡ ﻨﻨﺸﺊ ﻤﺼﺭ ﺃﺨﺭﻯ ﻭﺜﺎﻟﺜﺔ ﻭﺭﺍﺒﻌﺔ ﻭﺨﺎﻤﺴﺔ ﻓﻲ ﺍﻟﻤﺴﺎﺤﺎﺕ ﺍﻟﻬﺎﺌﻠﺔ ﺍﻟﻔﺎﺭﻏﺔ ﺍﻟﻤﺤـﺴﻭﺒﺔ‬
‫ﻋﻠﻴﻨﺎ ﻤﻥ ﺍﻟﺨﺭﻴﻁﺔ‪ ،‬ﻓﻠﻥ ﻨﺨﺭﺝ ﻤﻥ ﻤﺸﺎﻜﻠﻨﺎ ﺃﺒﺩﺍ!‪ ..‬ﺒﻁﺭﻴﻘﺔ ﺃﺨﺭﻯ‪ :‬ﻟﻥ ﻨﻀﻴﻑ ﺸـﻴﺌﺎ ﺇﻟـﻰ‬
‫ﺍﻟﺘﺎﺭﻴﺦ‪ ،‬ﻤﺎ ﻟﻡ ﻨﻀﻑ ﺸﻴﺌﺎ ﺇﻟﻰ ﺍﻟﺠﻐﺭﺍﻓﻴﺎ!‬
‫ﻏﻴﺭ ﻫﺫﺍ‪ ،‬ﺴﻴﻅل ﺍﻟﺤﺎل ﻴﺘﺩﻫﻭﺭ ﻤﻥ ﺴﻲﺀ ﺇﻟﻰ ﺃﺴﻭﺃ‪ ،‬ﻷﻥ ﺍﻟﺒﺌﺭ ﺘﺠﻑ‪ ،‬ﻭﺍﻟﺴﺎﻗﻴﺔ ﺘﺴﻔﻲ ﺍﻟﺭﻤﺎل‪،‬‬
‫ﻭﻨﺤﻥ ﻻ ﻨﺒﺩﻭ ﺃﻜﺜﺭ ﻤﻥ ﻁﻭﻓﺎﻥ ﻤﻥ ﺍﻟﺠﺭﺍﺩ ﺍﻟﺒﺸﺭﻱ ﻤﻬﻤﺘﻪ ﺃﻥ ﻴﺄﺘﻲ ﻋﻠﻰ ﻤﺎ ﺘﺒﻘﻰ ﻤﻥ ﺍﻟﺨﻀﺭﺓ‬
‫ﻓﻲ ﻫﺫﺍ ﺍﻟﻭﻁﻥ!‬
‫ﻓﻬل ﻫﻨﺎﻙ ﻤﻥ ﻴﺭﻴﺩ ﺃﻥ ﻴﻐﻴﺭ ﻫﺫﺍ‪ ،‬ﻭﻴﻌﺩل ﺍﻟﻤﻭﺍﺯﻴﻥ ﺍﻟﻤﺨﺘﻠﺔ‪ ،‬ﻭﻴﺤﻭل ‪ ٨٥‬ﻤﻠﻴﻭﻥ ﻤﺴﺘﻬﻠﻙ ﺇﻟﻰ‬
‫‪ ٨٥‬ﻤﻠﻴﻭﻥ ﻓﻼﺡ ﻭﻋﺎﻤل ﻭﻤﻨﺘﺞ ﻭﻤﺒﺩﻉ ﻭﻤﺘﺭﺠﻡ ﻭﻋﺎﻟﻡ ﻭﻤﺨﺘﺭﻉ؟ )ﺃﻡ ﺴﻨﺨﺘﺎﺭ ﺍﻟﺤل ﺍﻷﺴـﻬل‬
‫ﺒﺈﺒﺎﺤﺔ ﺍﻹﺠﻬﺎﺽ ﻭﻗﺘل ﺍﻟﻨﻔﺱ ﺍﻟﺘﻲ ﺤﺭﻡ ﺍﷲ ﻨﺘﻴﺠﺔ ﻟﻌﺩﻡ ﺍﻟﺜﻘﺔ ﺒﺭﺯﻗﻪ ﻭﻜﺭﻤﻪ‪ ،‬ﻭﺤﺭﻤﺎﻥ ﻤـﻥ‬
‫ﻴﻨﺠﺏ ﺃﻜﺜﺭ ﻤﻥ ﻁﻔﻠﻴﻥ ﻤﻥ ﺍﻟﺩﻋﻡ(؟؟‬
‫ﺇﺫﺍ ﺍﺨﺘﺭﺘﻡ ﺍﻹﺠﺎﺒﺔ ﺍﻻﻭﻟﻰ‪ ،‬ﻓﺄﺭﺠﻭ ﺃﻥ ﺘﺸﺎﺭﻜﻭﻨﻲ ﻓﻲ ﻭﺍﺤﺩ ﻤﻥ ﺍﻟﻤﺸﺎﺭﻴﻊ ﺍﻟﻤﻤﻜﻨﺔ ﻓﻲ ﻭﻀﻌﻨﺎ‬
‫ﺍﻟﺭﺍﻫﻥ‪ ،‬ﻭﻫﻭ ﻤﺸﺭﻭﻉ ﺍﻟﺘﺭﺠﻤﺔ ﺍﻟﺠﺎﻤﻌﻴﺔ‪:‬‬

‫‪٤٠‬‬
‫ﻤﺸﺭﻭﻉ ﺍﻟﺘﺭﺠﻤﺔ ﺍﻟﺠﺎﻤﻌﻴﺔ‪ :‬ﻓﻜﺭﺓ ﻋﺒﻘﺭﻴﺔ ﻟﺭﺩﻡ ﺍﻟﻔﺠﻭﺓ ﺍﻟﺤﻀﺎﺭﻴﺔ‬

‫ﻗﺭﺃﺕ ﺍﻗﺘﺭﺤﺎ ﻟﻠﻤﻬﻨﺩﺱ ﻨﺎﺩﺭ ﺍﻟﻤﻨﺴﻲ ﻓﻲ ﻜﺘﺎﺒﻪ "ﻫﻨﺩﺴﺔ ﻭﻓﻥ ﺘﻤﺩﻴﺩ ﻜﺎﺒﻼﺕ ﺍﻟـﺸﺒﻜﺎﺕ"‪ ،‬ﺒـﺄﻻ‬
‫ﺘﻌﻁﻲ ﺍﻟﺠﺎﻤﻌﺎﺕ ﺍﻟﻌﺭﺒﻴﺔ ﺸﻬﺎﺩﺍﺕ ﺍﻟﺒﻜﺎﻟﻭﺭﻴﻭﺱ ﺃﻭ ﺍﻟﻤﺎﺠﺴﺘﻴﺭ ﺃﻭ ﺍﻟـﺩﻜﺘﻭﺭﺍﻩ ﻷﻱ ﻁﺎﻟـﺏ ﺃﻭ‬
‫ﺒﺎﺤﺙ ﻓﻲ ﺍﻟﻜﻠﻴﺎﺕ ﺍﻟﻌﻠﻤﻴﺔ ﻜﻜﻠﻴﺎﺕ ﺍﻟﻬﻨﺩﺴﺔ ﻭﻜﻠﻴﺎﺕ ﺍﻟﺤﺎﺴﺒﺎﺕ ﻭﺍﻟﻤﻌﻠﻭﻤﺎﺕ ﻭﻜﻠﻴﺎﺕ ﺍﻟﻌﻠﻭﻡ‪ ،‬ﺇﻻ‬
‫ﺇﺫﺍ ﺘﺭﺠﻡ ﻋﻠﻰ ﺍﻷﻗل ﺃﺤﺩ ﺍﻟﻤﺭﺍﺠﻊ ﺍﻷﺠﻨﺒﻴﺔ ﻓﻲ ﻤﺠﺎل ﺘﺨﺼﺼﻪ ﺇﻟﻰ ﺍﻟﻌﺭﺒﻴﺔ‪ ،‬ﻋﻠﻰ ﺃﻥ ﺘﻘـﻭﻡ‬
‫ﺍﻟﺩﻭﻟﺔ ﺒﻭﻀﻊ ﻫﺫﻩ ﺍﻟﺘﺭﺠﻤﺎﺕ ﻋﻠﻰ ﻤﻭﻗﻊ ﺨﺎﺹ ﺒﻬﺎ ﻋﻠﻰ ﺸﺒﻜﺔ ﺍﻹﻨﺘﺭﻨـﺕ ﻟﺘﻜـﻭﻥ ﻤﺘﺎﺤـﺔ‬
‫ﻟﻠﺠﻤﻴﻊ‪ ،‬ﺇﻀﺎﻓﺔ ﺇﻟﻰ ﺘﺭﺠﻤﺎﺕ ﺭﺴﺎﺌل ﺍﻟﻤﺎﺠﺴﺘﻴﺭ ﻭﺍﻟﺩﻜﺘﻭﺭﺍﻩ‪.‬‬
‫ﻭﺃﻨﺎ ﺃﺭﻯ ﺃﻥ ﻫﺫﺍ ﺍﻗﺘﺭﺍﺡ ﻋﺒﻘﺭﻱ‪ ،‬ﻭﻻ ﺃﺩﺭﻱ ﻜﻴﻑ ﻏﻔل ﻋﻨﻪ ﺍﻟﻤﺴﺌﻭﻟﻭﻥ ﻋـﻥ ﺍﻟﺘﻌﻠـﻴﻡ ﻤﻨـﺫ‬
‫ﻨﺼﻑ ﻗﺭﻥ!‬
‫ﺍﻗﺘﺭﺍﺡ ﻜﻬﺫﺍ ﻜﻔﻴل ﺒﺈﺤﺩﺍﺙ ﺤﺭﻜﺔ ﺘﺭﺠﻤﺔ ﻨﺸﻁﺔ ﺘﻘﻠل ﺍﻟﻔﺠﻭﺓ ﺒﻴﻨﻨﺎ ﻭﺒﻴﻥ ﺍﻟﻐﺭﺏ‪ ،‬ﻭﺘﺯﻴﺩ ﻤﻥ ﻜﻡ‬
‫ﺍﻟﻤﻌﺭﻓﺔ ﺍﻟﻤﻜﺘﻭﺒﺔ ﺒﺎﻟﻌﺭﺒﻴﺔ‪ ،‬ﻤﻤﺎ ﻴﻤﻨﺢ ﺍﻟﻔﺘﻴﺔ ﺍﻟﺼﻐﺎﺭ ﺍﻟﻘﺩﺭﺓ ﻋﻠﻰ ﺍﻟﻘﺭﺍﺀﺓ ﻓﻲ ﺍﻟﻌﻠﻭﻡ ﺒـﺎﻜﺭﺍ‪،‬‬
‫ﺩﻭﻥ ﺍﻻﺼﻁﺩﺍﻡ ﺒﻤﺸﺎﻜل ﺍﻻﺴﺘﻴﻌﺎﺏ ﺒﻠﻐﺔ ﺃﺠﻨﺒﻴﺔ‪ ،‬ﻭﻫﻭ ﻤﺎ ﺴﻴﺯﻴﺩ ﻤﻥ ﺴﺭﻋﺔ ﺍﻟﺘﻌﻠﻡ ﻭﻜﻔﺎﺀﺘـﻪ‪،‬‬
‫ﻭﺍﻟﻘﺩﺭﺓ ﺍﻟﻤﺒﻜﺭﺓ ﻋﻠﻰ ﺍﻻﺒﺘﻜﺎﺭ ﻭﺍﻹﺒﺩﺍﻉ‪ ..‬ﻜﻤﺎ ﺃﻥ ﻫﺫﺍ ﺴﻴﺠﻌل ﻟﻠﺩﺭﺍﺴﺔ ﺒﺎﻹﻨﺠﻠﻴﺯﻴﺔ ﻭﺍﻟﻔﺭﻨﺴﻴﺔ‬
‫ﻓﻲ ﺍﻟﺠﺎﻤﻌﺎﺕ ﻓﺎﺌﺩﺓ ﺤﻘﻴﻘﻴﺔ‪ ،‬ﻭﻫﻲ ﻗﺩﺭﺓ ﺍﻟﻤﺘﻌﻠﻡ ﻋﻠﻰ ﺘﻌﺭﻴﺏ ﺍﻟﻌﻠﻭﻡ ﺍﻟﺘﻲ ﻴﺩﺭﺴﻬﺎ‪.‬‬
‫ﺜﻡ ﺇﻥ ﺘﺭﺠﻤﺔ ﻤﺭﺠﻊ ﻋﻠﻤﻲ ﻫﻲ ﺨﺒﺭﺓ ﻫﺎﺌﻠﺔ‪ ،‬ﺘﺠﻌل ﺍﻟﻁﺎﻟﺏ ﻴﺠﻴﺩ ﻤﺤﺘﻭﻯ ﺍﻟﻤﺭﺠﻊ‪ ،‬ﻭﻴﺘﻤـﺭﺱ‬
‫ﻋﻠﻰ ﺍﻟﺘﺭﺠﻤﺔ ﻭﻴﻘﻭﻱ ﻟﻐﺘﻪ ﺍﻹﻨﺠﻠﻴﺯﻴﺔ ﻭﺃﺴﻠﻭﺒﻪ ﺒﺎﻟﻌﺭﺒﻴﺔ‪ ،‬ﻭﻫﻭ ﻤﺎ ﻴﻀﺎﻑ ﺇﻟﻰ ﺴﻴﺭﺘﻪ ﺍﻟﺫﺍﺘﻴـﺔ‬
‫ﺒﻌﺩ ﺍﻟﺘﺨﺭﺝ ﻭﻴﻌﻴﻨﻪ ﻋﻠﻰ ﺍﻟﻌﺜﻭﺭ ﻋﻠﻰ ﻓﺭﺼﺔ ﻋﻤل ﺃﻓﻀل ﺒﺈﺫﻥ ﺍﷲ‪.‬‬
‫ﻟﻘﺩ ﻜﺎﻨﺕ ﺤﺭﻜﺔ ﺍﻟﺘﺭﺠﻤﺔ ﺍﻟﻜﺒﻴﺭﺓ ﻤﻥ ﺍﻟﻔﺎﺭﺴﻴﺔ ﻭﺍﻟﻴﻭﻨﺎﻨﻴﺔ ﻭﺍﻟﻬﻨﺩﻴﺔ ﻭﺍﻟﺼﻴﻨﻴﺔ ﺇﻟﻰ ﺍﻟﻌﺭﺒﻴﺔ‪ ،‬ﻫﻲ‬
‫ﺃﺴﺎﺱ ﻨﻬﻀﺔ ﺍﻟﻤﺴﻠﻤﻴﻥ‪ ،‬ﻭﻜﺫﻟﻙ ﻟﻡ ﺘﺨﺭﺝ ﺃﻭﺭﻭﺒﺎ ﻤﻥ ﺍﻟﻘﺭﻭﻥ ﺍﻟﻭﺴﻁﻰ ﺇﻻ ﺤﻴﻨﻤـﺎ ﺃﺭﺴـﻠﺕ‬
‫ﻤﺜﻘﻔﻴﻬﺎ ﺇﻟﻰ ﺍﻷﻨﺩﻟﺱ ﻟﺘﻌﻠﻡ ﺍﻟﻌﺭﺒﻴﺔ ﻭﺘﺭﺠﻤﺔ ﻜﺘﺒﻬﺎ‪ ..‬ﻭﺒﻌﺩ ﺴﻘﻭﻁ ﺍﻷﻨﺩﻟﺱ ﺴﺎﺭﺕ ﻗﻭﺍﻓل ﻁﻭﻴﻠﺔ‬
‫ﻤﻥ ﺍﻟﺩﻭﺍﺏ ﺘﺤﻤل ﻤﻼﻴﻴﻥ ﺍﻟﻜﺘﺏ ﺍﻟﻌﺭﺒﻴﺔ ﺇﻟﻰ ﻜل ﻤﻜﺎﻥ ﻓﻲ ﺃﻭﺭﻭﺒﺎ‪ ،‬ﻟﺘﺒﺩﺃ ﺤﺭﻜﺔ ﺘﺭﺠﻡ ﻋﻤﻼﻗﺔ‬
‫ﻭﺍﻜﺒﻬﺎ ﻅﻬﻭﺭ ﺍﻟﻁﺒﺎﻋﺔ‪ ،‬ﻓﺎﺸﺘﻌﻠﺕ ﺍﻟﻨﻬﻀﺔ ﺒﺴﺭﻋﺔ ﻫﺎﺌﻠﺔ‪.‬‬
‫‪٤١‬‬
‫ﻭﺤﺩﻴﺜﺎ‪ ،‬ﺘﺭﺠﻤﺕ ﺍﻟﻴﺎﺒﺎﻥ ﻓﻲ ﺍﻟﻌﺎﻡ ‪١٩٧٥‬ﻡ ﻭﺤﺩﻩ ‪ ١٧٥‬ﺃﻟﻑ ﻜﺘﺎﺏ‪ ،‬ﻭﻗـﺩ ﺤـﺩﺜﺕ ﺍﻟﻁﻔـﺭﺓ‬
‫ﺍﻻﻗﺘﺼﺎﺩﻴﺔ ﺍﻟﻴﺎﺒﺎﻨﻴﺔ ﻤﻨﺫ ﺫﻟﻙ ﺍﻟﻭﻗﺕ ﺘﻘﺭﻴﺒﺎ‪ ،‬ﻭﻤﺎ ﺯﺍل ﺍﻻﻫﺘﻤﺎﻡ ﺒﺎﻟﺘﺭﺠﻤﺔ ﻗﺎﺌﻤﺎﹰ ﻫﻨـﺎﻙ ﺤﺘـﻰ‬
‫ﺍﻵﻥ‪.‬‬
‫ﻓﻠﻤﺎﺫﺍ ﻻ ﻴﺒﺩﺃ ﺍﻟﻌﺭﺏ ﺤﺭﻜﺔ ﺘﺭﺠﻤﺔ ﻫﺎﺌﻠﺔ ﺘﻭﺍﻜﺒﻬﺎ ﺜﻭﺭﺓ ﺍﻟﻤﻌﻠﻭﻤﺎﺘﻴﺔ ﻭﺍﻹﻨﺘﺭﻨﺕ‪ ،‬ﻭﻫـﻲ ﻟـﻥ‬
‫ﺘﻜﻠﻑ ﺸﻴﺌﺎ‪ ،‬ﻓﺎﻟﻁﻠﺒﺔ ﻓﻲ ﺍﻟﺠﺎﻤﻌﺎﺕ ﻓﻌﻼ‪ ،‬ﻭﺍﻟﻤﺭﺍﺠﻊ ﺍﻷﺠﻨﺒﻴﺔ ﻤﺘﺎﺤﺔ ﻤﺠﺎﻨﺎ ﻋﺒـﺭ ﺍﻹﻨﺘﺭﻨـﺕ‪،‬‬
‫ﻭﻨﺸﺭ ﺍﻟﻜﺘﺏ ﺍﻟﻤﺘﺭﺠﻤﺔ ﻋﻠﻰ ﺍﻹﻨﺘﺭﻨﺕ ﻻ ﻴﻜﻠﻑ ﺸﻴﺌﺎ!‬
‫ﻟﻤﺎﺫﺍ ﻻ ﻨﺭﻜﺏ ﺍﻟﻤﻭﺠﺔ ﺍﻟﺤﻀﺎﺭﻴﺔ ﺍﻟﺠﺩﻴﺩﺓ ﻫﺫﻩ ﺍﻟﻤﺭﺓ‪ ،‬ﻭﻨﻠﻌﺏ ﺒﻁﺭﻴﻘﺔ ﺼﺤﻴﺤﺔ؟‬
‫***‬
‫ﺇﻀﺎﻓﺔ ﺇﻟﻰ ﻜل ﻫﺫﺍ‪ ،‬ﺴﺘﺴﺘﻔﻴﺩ ﺍﻟﺩﻭﻟﺔ ﺍﻟﺘﻲ ﺘﺘﺒﻨﻰ ﻫﺫﻩ ﺍﻟﻔﻜﺭﺓ ﻤﺎ ﻴﻠﻲ‪:‬‬
‫‪ -١‬ﺸﻐل ﻓﺭﺍﻍ ﺍﻟﺸﺒﺎﺏ ﻭﺇﻓﺭﺍﻍ ﻁﺎﻗﺘﻬﻡ ﻭﺤﻤﺎﺴﻬﻡ ﻓﻲ ﻤﺸﺭﻭﻉ ﻗﻭﻤﻲ ﻀﺨﻡ‪ ،‬ﻭﻫﺫﻩ ﺨﻴـﺭ‬
‫ﻭﺴﻴﻠﺔ ﻹﺒﻌﺎﺩﻫﻡ ﻋﻥ ﺍﻻﺴﺘﻘﻁﺎﺒﺎﺕ ﺍﻟﺴﻴﺎﺴﻴﺔ ﻭﺍﻟﺩﻴﻨﻴﺔ ﺍﻟﺘﻲ ﻻ ﺘﺭﻴﺩﻫﺎ ﺍﻟﺩﻭﻟﺔ‪.‬‬
‫‪ -٢‬ﻜﺴﺏ ﺜﻘﺔ ﺍﻟﺸﺒﺎﺏ ﺍﻟﻁﻤﻭﺡ‪ ،‬ﻭﺇﺒﻌﺎﺩﻩ ﻋﻥ ﺍﻟﺸﻌﻭﺭ ﺒﺎﻹﺤﺒﻁ ﻭﻓﻘﺩﺍﻥ ﺍﻟﺜﻘﺔ ﻓﻲ ﺍﻟﻤﺴﺌﻭﻟﻴﻥ‬
‫ﺒﺴﺏ ﺸﻴﻭﻉ ﺍﻟﺼﻭﺭﺓ ﺍﻟﺘﻘﻠﻴﺩﻴﺔ ﺃﻨﻬﻡ ﻻ ﻴﺭﻴﺩﻭﻥ ﺃﻥ ﻴﻁﻭﺭﻭﺍ ﺃﻭ ﻴﻐﻴﺭﻭﺍ ﺍﻱ ﺸﻲﺀ!‬
‫‪ -٣‬ﺘﻘﻠﻴل ﻤﻅﺎﻫﺭ ﺍﻟﻤﺭﺍﻫﻘﺔ ﻭﺍﻟﺘﻔﺎﻫﺔ ﻭﺍﻟﻔﺴﺎﺩ ﺍﻟﺘﻲ ﻨﺭﺍﻫﺎ ﻓﻲ ﺃﻭﺴﺎﻁ ﺍﻟﺸﺒﺎﺏ ﺤﺎﻟﻴﺎ‪ ،‬ﺒﺴﺒﺏ‬
‫ﺍﻨﺸﻐﺎﻟﻬﻡ ﺒﻤﺎ ﻴﻨﻔﻌﻬﻡ‪.‬‬
‫‪ -٤‬ﺸﻐل ﺍﻟﻤﺠﺘﻤﻊ ﺒﻔﻜﺭﺓ ﻤﻥ ﺃﺠل ﺘﻁﻭﺭﻩ ﻭﺼﻨﻊ ﻤﺴﺘﻘﺒﻠﻪ‪ ،‬ﻋﻥ ﺍﻟﻘﻀﺎﻴﺎ ﺍﻟﻌﻨﺼﺭﻴﺔ ﺍﻟﺘﻲ ﻻ‬
‫ﺘﻔﻴﺩ ﻤﻥ ﻗﺒﻴل )ﻤﺴﻠﻡ ﻭﻤﺴﻴﺤﻲ‪ ،‬ﺴﻨﻲ ﻭﺸﻴﻌﻲ‪ ،‬ﺇﺴﻼﻤﻲ ﻭﻋﻠﻤﺎﻨﻲ‪ ،‬ﻋﺭﺒـﻲ ﻭﻜـﺭﺩﻱ‪،‬‬
‫ﻗﻭﻤﻲ ﻭﻭﻁﻨﻲ‪ ...‬ﺇﻟﺦ(‪ ،‬ﻓﻌﻠﻰ ﺍﻟﺠﻤﻴﻊ ﺃﻥ ﻴﺩﺭﻜﻭﺍ ﺃﻥ ﺍﻟﺴﻔﻴﻨﺔ ﺘﻐﺭﻕ ﺒﻨﺎ ﺠﻤﻴﻌﺎ‪ ،‬ﻭﻟـﻥ‬
‫ﻴﺘﺒﻘﻰ ﻷﺤﺩ ﻤﺎ ﻴﻜﺴﺒﻪ ﺇﻥ ﻓﺎﺯ ﻓﻲ ﻫﺫﻩ ﺍﻟﺼﺭﺍﻋﺎﺕ ﺍﻟﻭﻫﻤﻴﺔ‪ ،‬ﺇﻥ ﻟﻡ ﻨﻌﻤل ﺠﻤﻴﻌﺎ ﻟﺼﻨﻊ‬
‫ﻤﺴﺘﻘﺒل ﺃﻓﻀل ﻟﻠﻭﻁﻥ ﺍﻟﺫﻱ ﻨﻌﻴﺵ ﻓﻴﻪ‪ ..‬ﺇﻥ ﺍﻷﻤﺭﺍﺽ ﺍﻟﺘﻲ ﺘﺼﻴﺒﻨﺎ ﻤﻥ ﺍﻟﻁﻌﺎﻡ ﻭﺍﻟﻤﺎﺀ‬
‫ﺍﻟﻤﻠﻭﺜﻴﻥ ﻻ ﺘﻔﺭﻕ ﺒﻴﻥ ﺩﻴﻥ ﺃﻭ ﻤﺫﻫﺏ ﺃﻭ ﺍﻨﺘﻤﺎﺀ ﺤﺯﺒﻲ‪ ،‬ﻭﺍﻟﺒﻁﺎﻟـﺔ ﻭﺍﻟﻔﻘـﺭ ﻭﺍﻟﻐـﻼﺀ‬
‫ﻭﺍﻟﻌﺸﻭﺍﺌﻴﺔ ﻭﺍﻟﻘﺒﺢ ﺘﻠﺘﻬﻤﻨﺎ ﺠﻤﻴﻌﺎ ﻤﻬﻤﺎ ﻜﺎﻥ ﻟﻭﻨﻨﺎ ﺃﻭ ﻤﻌﺘﻘﺩﻨﺎ ﺃﻭ ﺘﻔﻜﻴﺭﻨﺎ‪ ..‬ﻟﻜل ﻫﺫﺍ ﻓﺈﻥ‬
‫ﺍﻟﺤل ﺍﻷﻤﺜل ﻟﻠﻘﻀﺎﺀ ﻋﻠﻰ ﻜل ﻫﺫﻩ ﺍﻟﺘﺼﺩﻋﺎﺕ ﺍﻟﻨﺎﺘﺠﺔ ﻋﻥ ﺍﻟﺨﻭﺍﺀ‪ ،‬ﻫﻭ ﺸﻐل ﺍﻟﺠﻴـل‬
‫‪٤٢‬‬
‫ﺍﻟﺠﺩﻴﺩ ﺒﻤﺸﺭﻭﻉ ﻗﻭﻤﻲ ﻋﻤﻼﻕ ﻴﻤﻨﻴﻬﻡ ﺒﻤﺴﺘﻘﺒل ﺃﻓﻀل‪ ،‬ﻭﻴﺴﺘﻐﺭﻗﻬﻡ ﻓﻲ ﻨﻘﺎﺵ ﻋﻠﻤـﻲ‬
‫ﻭﻓﻜﺭﻱ ﻭﻟﻐﻭﻱ ﻴﺸﻐﻠﻬﻡ ﻋﻥ ﺍﻟﻠﻐﻭ ﻭﺍﻟﺘﻌﺼﺏ ﻭﺍﻷﻓﻜﺎﺭ ﺍﻟﻬﺩﺍﻤﺔ‪ ،‬ﻭﻴﻭﺤﺩﻫﻡ ﻓﻲ ﺇﻁـﺎﺭ‬
‫ﻤﻥ ﺍﻟﻌﻤل ﺍﻟﻌﻠﻤﻲ ﺍﻟﺠﺎﺩ ﺍﻟﻤﺸﺘﺭﻙ‪.‬‬
‫ﻭﺍﻟﺠﻤﻴل ﺃﻥ ﻫﺫﻩ ﺍﻟﻔﻜﺭﺓ ﻟﻥ ﺘﻜﻠﻑ ﺍﻟﺩﻭﻟﺔ ﺸﻴﺌﺎ‪ ،‬ﻓﻜل ﻋﻨﺎﺼﺭﻫﺎ ﻤﺘﻭﻓﺭﺓ‪ :‬ﻤﻨﻅﻭﻤـﺔ ﺍﻟﺘﻌﻠـﻴﻡ‪،‬‬
‫ﺍﻟﻁﺎﻟﺏ‪ ،‬ﺍﻷﺴﺘﺎﺫ‪ ،‬ﺍﻟﺤﻭﺍﺴﻴﺏ ﺍﻟﺸﺨﺼﻴﺔ‪ ،‬ﺍﻹﻨﺘﻨﺭﻨﺕ‪ ..‬ﻓﻠﻡ ﺍﻻﻨﺘﻅﺎﺭ؟‬
‫***‬
‫ﻭﺃﻨﺎ ﺃﺯﻴﺩ ﻋﻠﻰ ﻫﺫﺍ ﺍﻻﻗﺘﺭﺍﺡ ﺍﻟﻌﺒﻘﺭﻱ ﺒﻌﺽ ﺍﻟﻨﻘﺎﻁ‪:‬‬
‫‪ -١‬ﺃﻻ ﺘﺘﻡ ﺘﺭﻗﻴﺔ ﺃﻱ ﺃﺴﺘﺎﺫ ﺠﺎﻤﻌﻲ ﺒﺩﻭﻥ ﺘﺭﺠﻤﺔ ﺃﺤﺩ ﺍﻟﻤﺭﺍﺠـﻊ ﺍﻷﺠﻨﺒﻴـﺔ ﻓـﻲ ﻤﺠـﺎل‬
‫ﺘﺨﺼﺼﻪ‪ ،‬ﺃﻭ ﻋﻠﻰ ﺍﻷﻗل ﺘﺭﺠﻤﺔ ﺍﻟﺒﺤﺙ ﺍﻟﺫﻱ ﺤﺼل ﺒﻪ ﻋﻠﻰ ﺍﻟﺘﺭﻗﻴﺔ!‬
‫‪ -٢‬ﺃﻥ ﻴﻜﻭﻥ ﺍﻟﻤﺭﺠﻊ ﺍﻟﺫﻱ ﻴﺘﺭﺠﻤﻪ ﺍﻟﻁﺎﻟﺏ ﻤﻘﺴﻤﺎ ﻋﻠﻰ ﺴﻨﻭﺍﺕ ﺩﺭﺍﺴﺘﻪ‪ ،‬ﻭﺠـﺯﺀﺍ ﻤـﻥ‬
‫ﺩﺭﺠﺎﺘﻪ ﺍﻟﺴﻨﻭﻴﺔ‪.‬‬
‫‪ -٣‬ﺃﻥ ﻴﻭﻀﻊ ﺍﻟﻤﺼﻁﻠﺢ ﺍﻟﻌﻠﻤﻲ ﺍﻷﺠﻨﺒﻲ ﺒﺠﻭﺍﺭ ﺍﻟﺘﺭﺠﻤﺔ ﺍﻟﻌﺭﺒﻴﺔ ﻋﻠﻰ ﺍﻷﻗل ﻓﻲ ﻋﻨﺎﻭﻴﻥ‬
‫ﺍﻟﻔﺼﻭل ﻭﺍﻟﻔﻘﺭﺍﺕ‪ ،‬ﻤﻊ ﻭﻀﻊ ﻗﺎﻤﻭﺱ ﺼﻐﻴﺭ ﻓﻲ ﻨﻬﺎﻴـﺔ ﺍﻟﻜﺘـﺎﺏ ﻴﺤﺘـﻭﻱ ﻋﻠـﻰ‬
‫ﺍﻟﻤﺼﻁﻠﺤﺎﺕ ﻭﺘﺭﺠﻤﺎﺘﻬﺎ‪ ..‬ﻫﺫﺍ ﻴﻀﻤﻥ ﻋﺩﻡ ﻓﺼل ﺍﻟﻘﺎﺭﺉ ﺒﺎﻟﻌﺭﺒﻴﺔ ﻋﻥ ﻤـﺼﻁﻠﺤﺎﺕ‬
‫ﺍﻟﻌﻠﻡ‪ ،‬ﻭﻴﻀﻤﻥ ﻗﺩﺭﺘﻪ ﻋﻠﻰ ﺍﻟﺒﺤﺙ ﻓﻲ ﺍﻹﻨﺘﺭﻨﺕ ﻭﻏﻴﺭ ﺫﻟﻙ‪.‬‬
‫‪ -٤‬ﺃﻥ ﻴﻭﺠﺩ ﺘﻌﺎﻭﻥ ﺒﻴﻥ ﻁﻠﺒﺔ ﻜﻠﻴﺎﺕ ﺍﻟﻠﻐﺔ ﺍﻟﻌﺭﺒﻴﺔ ﻭﺍﻟﻠﻐﺎﺕ ﺍﻷﺠﻨﺒﻴـﺔ ﻭﻁﻠﺒـﺔ ﺍﻟﻜﻠﻴـﺎﺕ‬
‫ﺍﻟﻌﻠﻤﻴﺔ‪ ،‬ﺒﺤﻴﺙ ﻴﻜﻭﻥ ﻫﻨﺎﻙ ﻓﺭﻴﻕ ﻋﻤل ﻤﺘﻜﺎﻤل‪ ..‬ﻤﺜﻼ‪ :‬ﺍﻟﻁﺎﻟﺏ ﺍﻟﻤﻬﻨﺩﺱ ﻗﺩ ﻴﺤﺘـﺎﺝ‬
‫ﺇﻟﻰ ﻁﺎﻟﺏ ﻟﻐﺔ ﻋﺭﺒﻴﺔ ﻟﺘﺩﻗﻴﻕ ﺍﻟﻨﺹ ﺍﻟﻤﺘﺭﺠﻡ‪ ،‬ﻭﺇﻟﻰ ﻁﺎﻟﺏ ﻴﺩﺭﺱ ﺍﻹﻨﺠﻠﻴﺯﻴﺔ ﻟﻠﺘﺄﻜـﺩ‬
‫ﻤﻥ ﺩﻗﺔ ﺍﻟﺘﺭﺠﻤﺔ ﻤﻥ ﺍﻷﺼل‪ ،‬ﻭﻴﻜﻭﻥ ﻫﺫﺍ ﺍﻟﻨﺸﺎﻁ ﺠﺯﺀﺍ ﻤﻥ ﺩﺭﺠﺎﺕ ﻜل ﻁﺎﻟﺏ ﻤـﻥ‬
‫ﻫﺅﻻﺀ‪ ..‬ﻻﺤﻅ ﺃﻥ ﺍﻟﺘﻭﺍﺼل ﺒﻴﻥ ﻁﻠﺒﺔ ﺍﻟﻜﻠﻴﺎﺕ ﺍﻟﻤﺨﺘﻠﻔﺔ ﻻ ﻴﺴﺘﺩﻋﻲ ﺍﻟﺘﻘﺎﺀﻫﻡ ﻭﺠﻬـﺎ‬
‫ﻟﻭﺠﻪ ﺃﻭ ﺘﻀﻴﻴﻊ ﺃﻱ ﻭﻗﺕ‪ ،‬ﻓﺎﻷﻤﺭ ﻻ ﻴﺤﺘﺎﺝ ﺃﻜﺜﺭ ﻤﻥ ﺘﻭﺍﺼل ﺍﻟﻔﺭﻴﻕ ﺩﻭﺭﻴـﺎ ﻋﺒـﺭ‬
‫ﻤﻭﻗﻊ ﺍﻟﻨﺸﺭ‪ ،‬ﻭﺘﻌﻠﻴﻕ ﻜل ﻤﻨﻬﻡ ﻋﻠﻰ ﺍﻟﻌﻤل ﺍﻟﻤﺘﺭﺠﻡ ﻭﺘﻨﻘﻴﺤﻪ ﻟﻪ‪ ،‬ﻭﺘﻘﺩﻴﻡ ﺘﻘﺭﻴﺭﻩ ﺇﻟـﻰ‬
‫ﺃﺴﺘﺎﺫﻩ ﺍﻟﻤﺸﺭﻑ‪ ..‬ﻭﺒﻬﺫﺍ ﻴﻜﻭﻥ ﻫﻨﺎﻙ ﺘﻭﺍﺼل ﺒﻴﻥ ﺍﻟﺘﺨﺼـﺼﺎﺕ ﺍﻟﻤﺨﺘﻠﻔـﺔ‪ ،‬ﻭﻴـﺘﻡ‬
‫‪٤٣‬‬
‫ﺍﻻﺴﺘﻔﺎﺩﺓ ﻤﻥ ﺠﻴﻭﺵ ﺍﻟﻤﺘﻌﻠﻤﻴﻥ ﻓﻲ ﺍﻟﺠﺎﻤﻌﺎﺕ ﺍﻟﺫﻴﻥ ﻻ ﻴﺴﺘﻔﻴﺩﻭﻥ ﺸﻴﺌﺎ ﻤﻤﺎ ﻴﺩﺭﺴﻭﻨﻪ‪،‬‬
‫ﻭﻻ ﻴﻔﻴﺩﻭﻥ ﺃﺤﺩﺍ ﺒﺸﻲﺀ!‬
‫‪ -٥‬ﺃﻥ ﺘﻁﺒﻊ ﺍﻟﺩﻭﻟﺔ ﺃﻓﻀل ﻫﺫﻩ ﺍﻟﻤﺭﺍﺠﻊ ﻭﺘﻌﻁﻲ ﺠﻭﺍﺌﺯ ﻷﺼﺤﺎﺒﻬﺎ‪.‬‬
‫‪ -٦‬ﺍﻻﺴﺘﻌﺎﻨﺔ ﺒﺎﻟﻁﻼﺏ ﺍﻟﻤﺘﻤﻴﺯﻴﻥ ﻓﻲ ﺍﻟﻠﻐﺎﺕ ﻭﺍﻟﺒﺭﻤﺠﺔ‪ ،‬ﻓﻲ ﻭﻀـﻊ ﻨﻤـﻭﺫﺝ ﺘﺤﻠﻴﻠـﻲ‬
‫ﻟﺘﻭﺼﻴﻑ ﺍﻟﻌﻼﻗﺎﺕ ﺍﻟﺘﻲ ﺘﺭﺒﻁ ﺍﻟﻜﻠﻤﺎﺕ ﻭﺍﻟﻤﻌﺎﻨﻲ ﻭﺍﻟﻤﺠـﺎﺯﺍﺕ )ﺸـﺠﺭﺓ ﺍﻟـﺩﻻﻻﺕ(‬
‫ﻟﺘﺴﻬﻴل ﺍﻟﻭﺼﻭل ﺇﻟﻰ ﺒﺭﺍﻤﺞ ﺍﻟﺘﺭﺠﻤﺔ ﺍﻵﻟﻴﺔ‪ ،‬ﻭﺩﻤﺞ ﻫﺫﺍ ﺒﻤـﺸﺭﻭﻉ ﺍﻟﺘﺭﺠﻤـﺔ ﻤـﻥ‬
‫ﺍﻹﻨﺠﻠﻴﺯﻴﺔ ﺇﻟﻰ ﺍﻟﻌﺭﺒﻴﺔ‪ ،‬ﺒﺘﺤﻠﻴل ﺍﻟﻨﺼﻭﺹ ﺍﻷﺼﻠﻴﺔ ﻭﺍﻟﻤﺘﺭﺠﻤﺔ‪ ،‬ﻟﻴﺒﻨﻰ ﻋﻠﻴﻬﺎ ﺒـﺭﺍﻤﺞ‬
‫ﺍﻟﺘﺭﺠﻤﺔ ﺍﻵﻟﻴﺔ ﻭﺍﻟﺘﺤﻠﻴل ﺍﻵﻟﻲ ﻟﻠﻤﻌﺎﻨﻲ ﻭﻤﺎ ﺸﺎﺒﻪ‪.‬‬
‫ﺒﻬﺫﻩ ﺍﻹﻀﺎﻓﺎﺕ‪ ،‬ﺴﻨﻀﻤﻥ ﻤﺎ ﻴﻠﻲ‪:‬‬
‫‪ -‬ﻗﻴﺎﻡ ﺍﻟﻁﺎﻟﺏ ﺒﺎﻟﺘﺭﺠﻤﺔ ﻓﻲ ﺘﺨﺼﺼﻪ ﺍﻟﻌﻠﻤﻲ‪ ،‬ﻭﺘﺤﺕ ﺇﺸﺭﺍﻑ ﺃﺴﺘﺎﺫﻩ ﺍﻟﺠﺎﻤﻌﻲ‪ ،‬ﺴﻴﺠﻌﻠﻨﺎ ﻻ‬
‫ﻨﻘﻠﻕ ﻤﻥ ﻤﺸﺎﻜل ﺍﻟﻤﺼﻁﻠﺢ‪ ،‬ﻷﻥ ﻫﺫﺍ ﺴﻴﺒﺩﺃ ﻨﻘﺎﺸﺎ ﺜﻭﺭﻴﺎ ﻓﻲ ﺍﻟﺠﺎﻤﻌﺎﺕ ﻭﻋﻠﻰ ﺍﻹﻨﺘﺭﻨـﺕ‬
‫ﻭﺴﻴﺤﻴﻲ ﺍﻟﻠﻐﺔ ﺍﻟﻌﺭﺒﻴﺔ‪ ،‬ﻭﺴﻴﺠﻌﻠﻬﺎ ﻤﻭﺍﻜﺒﺔ ﻟﻜل ﺘﻁﻭﺭ ﻋﺎﻟﻤﻲ!‬
‫‪ -‬ﻻ ﺘﻨﺴﻭﺍ ﺃﻴﻀﺎ ﺃﻨﻨﺎ ﻓﻲ ﻋﺼﺭ ﺍﻟﺤﺎﺴﻭﺏ‪ ،‬ﻭﻜل ﻤﻨﺎ ﻟﺩﻴﻪ ﻋـﺸﺭﺍﺕ ﺍﻟﺒـﺭﺍﻤﺞ ﺍﻟﻤـﺴﺎﻋﺩﺓ‬
‫ﻟﻠﺘﺭﺠﻤﺔ‪ ،‬ﻭﻋﺸﺭﺍﺕ ﺍﻟﻘﻭﺍﻤﻴﺱ ﺍﻟﻤﺘﺨﺼﺼﺔ‪ ..‬ﺍﻷﻤﻭﺭ ﺼﺎﺭﺕ ﺃﺴﻬل ﻜﺜﻴﺭﺍ ﻤﻤﺎ ﻤـﻀﻰ‪،‬‬
‫ﻭﻟﻥ ﻴﺠﻭﺏ ﺍﻟﻤﺭﺀ ﺍﻟﻤﻜﺘﺒﺎﺕ ﺒﺤﺜﺎ ﻋﻥ ﻤﻌﻨﻰ ﻜﻠﻤﺔ‪ ،‬ﻓﻔﻲ ﺜﺎﻨﻴﺔ ﻭﺍﺤﺩﺓ ﺴﻴﻔﺘﺢ ﻤﻭﻗﻊ ﺘﺭﺠﻤـﺔ‬
‫ﺠﻭﺠﻴل‪ ،‬ﻭﻴﺤﺼل ﻋﻠﻰ ﻤﻌﻨﺎﻫﺎ!‪ ..‬ﻫﺫﺍ ﻴﺠﻴﺏ ﻋﻥ ﺃﻱ ﺴﺅﺍل ﺤﻭل ﺭﻜﺎﻜﺔ ﻤﺴﺘﻭﻯ ﺍﻟﻁﻼﺏ‬
‫ﻓﻲ ﺍﻹﻨﺠﻠﻴﺯﻴﺔ‪ ..‬ﻨﺤﻥ ﻻ ﻨﺤﺘﺎﺝ ﻤﻨﻬﻡ ﺇﻻ ﻓﻬﻡ ﺍﻟﻤﺼﻁﻠﺤﺎﺕ ﻭﺍﻟﻤﻀﻤﻭﻥ ﺍﻟﻌﻠﻤﻲ‪ ،‬ﺨﺎﺼﺔ ﺃﻥ‬
‫ﺍﻟﻠﻐﺔ ﺍﻟﻤﺴﺘﺨﺩﻤﺔ ﻓﻲ ﺍﻟﻤﺭﺍﺠﻊ ﺍﻟﻌﻠﻤﻴﺔ ﻫﻲ ﺍﻹﻨﺠﻠﻴﺯﻴﺔ ﺍﻟﻤﺒﺴﻁﺔ‪ ..‬ﻨﺤﻥ ﻨﻁﻠﺏ ﻤـﻨﻬﻡ ﻓﻘـﻁ‬
‫ﺍﻟﻘﺩﺭﺓ ﻋﻠﻰ ﺍﻟﻜﺘﺎﺒﺔ ﺒﺄﺒﺴﻁ ﺃﺴﻠﻭﺏ ﺒﺎﻟﻌﺭﺒﻴﺔ‪ ،‬ﻭﻻ ﻨﻁﻠﺏ ﻤﻨﻬﻡ ﺍﻟﻜﺘﺎﺒﺔ ﺒﺎﻹﻨﺠﻠﻴﺯﻴـﺔ‪ ،‬ﻓﻬـﺫﺍ‬
‫ﻴﺘﻁﻠﺏ ﺇﺠﺎﺩﺓ ﺃﻋﻠﻰ ﻟﻠﻐﺔ‪.‬‬
‫‪ -‬ﺇﺸﺭﺍﻙ ﻁﻠﺒﺔ ﺍﻟﻠﻐﺎﺕ ﺍﻷﺠﻨﺒﻴﺔ ﻭﺍﻟﻠﻐﺔ ﺍﻟﻌﺭﺒﻴﺔ ﻓﻲ ﺍﻟﻤﺸﺭﻭﻉ ﻜﺠﺯﺀ ﻤﻥ ﺩﺭﺠﺎﺘﻬﻡ ﻴﻌﻨﻲ ﺃﻨﻬﻡ‬
‫ﺴﻴﻜﻭﻨﻭﻥ ﺘﺤﺕ ﺇﺸﺭﺍﻑ ﺃﺴﺎﺘﺫﺘﻬﻡ ﺃﻴﻀﺎ‪ ،‬ﻴﻀﻤﻥ ﻟﻨﺎ ﺭﻓﻊ ﻤﺴﺘﻭﻯ ﺍﻟﻠﻐﺔ ﻋﻨﺩ ﻁﻠﺒﺔ ﺍﻟﻜﻠﻴﺎﺕ‬

‫‪٤٤‬‬
‫ﺍﻟﻌﻠﻤﻴﺔ ﻭﺃﺴﺎﺘﺫﺘﻬﻡ‪ ،‬ﻜﻤﺎ ﻴﻀﻤﻥ ﺭﻓﻊ ﻤﺴﺘﻭﻯ ﺍﻟﻤﻌﺭﻓﺔ ﺍﻟﻌﻠﻤﻴﺔ ﻋﻨﺩ ﻁﻠﺒﺔ ﺍﻟﻜﻠﻴﺎﺕ ﺍﻟﻠﻐﻭﻴـﺔ‬
‫ﻭﺃﺴﺎﺘﺫﺘﻬﻡ!‬
‫‪ -‬ﻟﻭ ﺃﺜﻤﺭﺕ ﺠﻬﻭﺩ ﺘﺤﻠﻴل ﺍﻟﻠﻐﺔ ﻭﺒﻨﺎﺀ ﺸﺠﺭﺓ ﺍﻟﺩﻻﻻﺕ ﻓﻲ ﺇﻨﺘﺎﺝ ﺒﺭﺍﻤﺞ ﺘﺭﺠﻤﺔ ﻓﻭﺭﻴﺔ ﻋﺎﻟﻴﺔ‬
‫ﺍﻟﺩﻗﺔ ﻭﺍﻻﺤﺘﺭﺍﻓﻴﺔ‪ ،‬ﻓﻠﻥ ﻨﺤﺘﺎﺝ ﺇﻟﻰ ﺃﻴﺔ ﺠﻬﻭﺩ ﺇﻀﺎﻓﻴﺔ‪ ،‬ﻷﻥ ﺘﺭﺠﻤﺔ ﺍﻟﻤﺭﺍﺠﻊ ﺴﺘﺘﻡ ﺒﻌﺩ ﻫﺫﺍ‬
‫ﺒﻤﺠﺭﺩ ﻀﻐﻁﺔ ﺯﺭ!‬
‫ﺘﺨﻴل ﻓﻘﻁ ﻟﻭ ﺃﻥ ﻫﺫﻩ ﺍﻟﻔﻜﺭﺓ ﺩﺨﻠﺕ ﺤﻴﺯ ﺍﻟﺘﻨﻔﻴﺫ‪ ،‬ﻜﻴﻑ ﺴﺘﺭﻓﻊ ﺍﻟﻤﺴﺘﻭﻯ ﺍﻟﻌﻠﻤـﻲ ﻭﺍﻟﻔﻜـﺭﻱ‬
‫ﻭﺍﻟﻠﻐﻭﻱ ﻟﻜل ﻤﻥ ﺍﻟﻁﺎﻟﺏ ﻭﺃﺴﺘﺎﺫﻩ!‬
‫ﺒل ﻜﻴﻑ ﺴﺘﻐﻴﺭ ﺸﻜل ﻤﺠﺘﻤﻌﺎﺘﻨﺎ!‬
‫ﺇﻥ ﻜﻠﻴﺔ ﺍﻟﻬﻨﺩﺴﺔ ﺠﺎﻤﻌﺔ ﺍﻟﻘﺎﻫﺭﺓ ﻭﺤﺩﻫﺎ ﺘﺨﺭﺝ ﺃﻜﺜﺭ ﻤﻥ ‪ ٢٠٠٠‬ﻁﺎﻟﺏ ﺴـﻨﻭﻴﺎ‪ ..‬ﺘﺨﻴـل ﺃﻥ‬
‫ﻴﺘﺤﻭل ﻫﺫﺍ ﺍﻟﻌﺩﺩ ﺇﻟﻰ ﻤﺭﺍﺠﻊ ﻤﺘﺭﺠﻤﺔ؟‬
‫ﻭﻤﺎﺫﺍ ﻟﻭ ﺃﻀﻴﻔﺕ ﺇﻟﻴﻪ ﻜﻠﻴﺎﺕ ﺃﺨﺭﻯ ﻭﺠﺎﻤﻌﺎﺕ ﺃﺨﺭﻯ ﻭﺩﻭل ﻋﺭﺒﻴﺔ ﺃﺨﺭﻯ؟‬
‫ﻫل ﺘﺘﺨﻴل ﺤﺠﻡ ﺍﻟﻁﻭﻓﺎﻥ ﺍﻟﻌﻠﻤﻲ ﺍﻟﺫﻱ ﺴﻴﺤﺩﺙ ﻓﻲ ﺍﻟﻭﻁﻥ ﺍﻟﻌﺭﺒﻲ ﻓﻲ ﺨﻤﺱ ﺴﻨﻭﺍﺕ ﻓﻘـﻁ‪،‬‬
‫ﺨﺼﻭﺼﺎ ﻤﻊ ﺘﺸﺎﺭﻜﻨﺎ ﻫﺫﻩ ﺍﻟﺘﺭﺠﻤﺎﺕ ﻋﺒﺭ ﺍﻹﻨﺘﺭﻨﺕ؟‬
‫ﻭﻻ ﺃﺭﻴﺩ ﺍﻟﺨﻭﺹ ﻫﻨﺎ ﻓﻲ ﺤﺴﺎﺒﺎﺕ ﻤﻌﻘﺩﺓ ﻋﻥ ﺃﻨﺴﺏ ﺤﺠﻡ ﻴﺘﺭﺠﻤﻪ ﺍﻟﻁﺎﻟﺏ ﻭﻴﻤﻜﻥ ﻟﻸﺴـﺎﺘﺫﺓ‬
‫ﻤﺭﺍﺠﻌﺘﻪ‪ ،‬ﻓﻬﺫﺍ ﺘﻘﺩﺭﻩ ﻜل ﻜﻠﻴﺔ ﻋﻠﻰ ﺤﺴﺏ ﺇﻤﻜﺎﻨﻴﺎﺘﻬﺎ ﻭﻨﺴﺒﺔ ﻋﺩﺩ ﻁﻼﺒﻬﺎ ﺇﻟﻰ ﻋﺩﺩ ﺃﺴﺎﺘﺫﺘﻬﺎ‪..‬‬
‫ﻟﻜﻥ ﺤﺘﻰ ﻟﻭ ﺃﺨﺫﻨﺎ ﺍﻟﺤﺩ ﺍﻷﺩﻨﻰ ﻟﻬﺫﻩ ﺍﻟﻔﻜﺭﺓ‪ ،‬ﻭﺍﻓﺘﺭﻀﻨﺎ ﺃﻥ ﺍﻟﺘﺭﺠﻤﺔ ﺴﺘﺘﻡ ﻓﻲ ﻜﻠﻴـﺔ ﻫﻨﺩﺴـﺔ‬
‫ﺍﻟﻘﺎﻫﺭﺓ ﻓﻘﻁ‪ ،‬ﻭﺃﻥ ﻜل ﻁﺎﻟﺏ ﺴﻴﺘﺭﺠﻡ ﺼﻔﺤﺔ ﻭﺍﺤﺩﺓ ﻓﻘﻁ ﻓﻲ ﻜل ﻓﺼل ﺩﺭﺍﺴﻲ‪ ،‬ﻓﻬﺫﺍ ﻤﻌﻨـﺎﻩ‬
‫ﺃﻨﻪ ﺴﻴﺘﺭﺠﻡ ‪ ١٠‬ﺼﻔﺤﺎﺕ ﻓﻲ ﺃﻋﻭﺍﻡ ﺩﺭﺍﺴﺘﻪ‪ ،‬ﻭﻫﻭ ﻤﺎ ﻴﻌﻨﻲ ﺘﺭﺠﻤﺔ ‪ ٢٠‬ﺃﻟﻑ ﺼـﻔﺤﺔ ﻤـﻊ‬
‫ﺘﺨﺭﺝ ﺩﻓﻌﺘﻪ )ﺒﺎﻓﺘﺭﺍﺽ ﺃﻥ ﺍﻟﺩﻓﻌﺔ ‪ ٢٠٠٠‬ﻁﺎﻟﺏ(‪ ،‬ﻭﻫﻭ ﻤﺎ ﻴﻌﺎﺩل ‪ ٢٠‬ﻤﺭﺠﻌﺎ ﻜﺒﻴﺭﺍ‪ ،‬ﻭﺒﻬـﺫﺍ‬
‫ﺴﻨﺤﺼل ﻜل ﻋﺎﻡ ﻋﻠﻰ ‪ ٢٠‬ﻤﺭﺠﻌﺎ ﻋﻠﻤﻴﺎ ﻋﺭﺒﻴﺎ‪ ،‬ﻤﻥ ﻜﻠﻴﺔ ﻭﺍﺤﺩﺓ ﻓﻘﻁ ﻓﻲ ﺠﺎﻤﻌﺔ ﻭﺍﺤﺩﺓ ﻓﻘﻁ‪،‬‬
‫ﻭﺒﺘﺭﺠﻤﺔ ﺍﻟﻁﺎﻟﺏ ﻟﺼﻔﺤﺔ ﻭﺍﺤﺩﺓ ﻓﻘﻁ ﻓﻲ ﻜل ﻓﺼل ﺩﺭﺍﺴﻲ!‬

‫‪٤٥‬‬
‫ﻭﻋﻠﻰ ﻜل ﺤﺎل‪ ،‬ﻋﺩﺩ ﺤﺎﻤﻠﻲ ﺍﻟﺩﻜﺘﻭﺭﺍﻩ ﻓﻲ ﻤﺼﺭ ﻭﺼل ﺇﻟﻰ ‪ ١‬ﻤـﻥ ﻜـل ‪ ١٠٠٠‬ﺘﻘﺭﻴﺒـﺎ‪،‬‬
‫ﻭﻴﻭﺠﺩ ﻓﻲ ﻗﺴﻡ ﺍﻻﺘﺼﺎﻻﺕ ﻓﻲ ﻫﻨﺩﺴﺔ ﺍﻟﻘﺎﻫﺭﺓ ﺤﻭﺍﻟﻲ ‪ ٨٠‬ﺃﺴﺘﺎﺫﺍ‪ ،‬ﺒﻤﺎ ﻴﻌﻨﻲ ﺘﻘﺭﻴﺒـﺎ ﻭﺠـﻭﺩ‬
‫ﺃﺴﺘﺎﺫ ﻟﻜل ‪ ١٠‬ﻁﻼﺏ!‬
‫ﻟﻬﺫﺍ ﻻ ﺃﻅﻥ ﺍﻟﻀﻐﻁ ﺴﻴﻜﻭﻥ ﻜﺒﻴﺭﺍ ﻋﻠﻰ ﺍﻷﺴﺎﺘﺫﺓ‪ ،‬ﻟﻭ ﺘﻡ ﺘﻨﻅﻴﻡ ﺍﻟﻤﺸﺭﻭﻉ ﺒﺎﻟﺼﻭﺭﺓ ﺍﻟﻤﻼﺌﻤﺔ‪.‬‬
‫***‬
‫ﻭﻫﻨﺎﻙ ﺃﻴﻀﺎ ﻨﻘﻁﺔ ﻫﺎﻤﺔ ﺒﺨﺼﻭﺹ ﺤﻘﻭﻕ ﺍﻟﻤﻠﻜﻴﺔ ﺍﻟﻔﻜﺭﻴﺔ ﻟﻠﻜﺘﺏ ﺍﻟﻤﺘﺭﺠﻤـﺔ‪ ..‬ﺍﻟﺤﻘﻴﻘـﺔ ﺃﻥ‬
‫ﺃﻤﻬﺎﺕ ﺍﻟﻜﺘﺏ ﺍﻟﻌﻠﻤﻴﺔ ﻓﻲ ﺍﻟﺭﻴﺎﻀﻴﺎﺕ ﻭﺍﻟﻔﻴﺯﻴﺎﺀ ﻭﺍﻟﻜﻴﻤﻴﺎﺀ ﻭﻏﻴﺭﻫﺎ ﻏﻴﺭ ﻤﺘﺭﺠﻤﺔ‪ ،‬ﻭﻫﺫﻩ ﻟﻡ ﻴﻌﺩ‬
‫ﻟﻬﺎ ﺤﻘﻭﻕ ﻤﻠﻜﻴﺔ ﻓﻜﺭﻴﺔ‪ ..‬ﻜﻤﺎ ﺃﻥ ﺃﻗﺼﻰ ﻤﺩﺓ ﻟﺤﻘﻭﻕ ﺍﻟﻤﻠﻜﻴﺔ ﺍﻟﻔﻜﺭﻴﺔ ﻫـﻲ ‪ ٢٠‬ﻋﺎﻤـﺎ ﻓـﻲ‬
‫ﺍﻻﺘﻔﺎﻗﻴﺔ ﺍﻟﺠﺩﻴﺩﺓ‪ ..‬ﻓﻠﻨﻘل ﺇﺫﻥ ﺇﻨﻨﺎ ﺴﻨﺭﺩﻡ ﺍﻟﻔﺠﻭﺓ ﺍﻟﺤﻀﺎﺭﻴﺔ ﺇﻟﻰ ﺁﺨﺭ ‪ ٢٠‬ﻋﺎﻤﺎ ﻓﻘـﻁ‪ ..‬ﻫـﺫﺍ‬
‫ﺃﻓﻀل ﻤﻥ ﻓﺠﻭﺓ ﺤﺠﻤﻬﺎ ‪ ٥٠٠‬ﻋﺎﻡ!!‬
‫***‬
‫ﻭﻗﺩ ﻁﻭﺭﺕ ﻫﺫﻩ ﺍﻟﻔﻜﺭﺓ ﻤﻥ ﺨﻼل ﺍﻟﻨﻘﺎﺸﺎﺕ‪ ،‬ﻤﻤﺎ ﺠﻌﻠﻨﻲ ﺃﻀﻴﻑ ﺇﻟﻴﻬﺎ ﺍﻻﻗﺘﺭﺍﺤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬
‫‪ -١‬ﺇﻀﺎﻓﺔ ﻤﺎﺩﺓ ﻓﻲ ﺍﻟﻤﺭﺤﻠﺔ ﺍﻟﺜﺎﻨﻭﻴﺔ‪ ،‬ﺍﺴﻤﻬﺎ ﺘﺭﺠﻤﺔ ﻋﻠﻤﻴﺔ‪ ،‬ﺘﻜﻭﻥ ﻤﺸﺘﺭﻜﺔ ﺒﻴﻥ ﻤـﺩﺭﺱ‬
‫ﺍﻟﻌﻠﻭﻡ )ﺍﻷﺤﻴﺎﺀ ـ ﺍﻟﻔﻴﺯﻴﺎﺀ ـ ﺍﻟﻜﻴﻤﻴﺎﺀ( ﻭﻤﺩﺭﺱ ﺍﻟﻠﻐﺔ ﺍﻹﻨﺠﻠﻴﺯﻴﺔ ﻭﻤـﺩﺭﺱ ﺍﻟﻠﻐـﺔ‬
‫ﺍﻟﻌﺭﺒﻴﺔ‪ ،‬ﻭﻴﻜﻭﻥ ﻋﻠﻰ ﻜل ﻁﺎﻟﺏ ﺃﻥ ﻴﺘﺭﺠﻡ ﻓﻴﻬﺎ ﺒﺤﻭﺜﺎ ﻗﺼﻴﺭﺓ ﻭﻤﻘﺎﻻﺕ ﻓﻲ ﺃﻱ ﻤﺠﺎل‬
‫ﻋﻠﻤﻲ ﻤﺒﺴﻁ‪ ..‬ﻭﻴﻜﻭﻥ ﺩﻭﺭ ﻤﺩﺭﺱ ﺍﻟﻌﻠﻭﻡ ﺘﻘﻴﻴﻡ ﺩﻗﺔ ﺍﻟﻤﺤﺘﻭﻯ ﺍﻟﻌﻠﻤﻲ ﻓـﻲ ﺍﻟـﻨﺹ‬
‫ﺍﻟﻤﺘﺭﺠﻡ‪ ،‬ﻭﻴﻜﻭﻥ ﺩﻭﺭ ﻤﺩﺭﺱ ﺍﻟﻠﻐﺔ ﺍﻟﻌﺭﺒﻴﺔ ﺘﻘﻴﻴﻡ ﺼﺤﺔ ﺍﻷﺴﻠﻭﺏ ﺍﻟﻌﺭﺒﻲ ﻭﺴﻼﺴـﺘﻪ‬
‫ﻭﻭﻀﻭﺤﻪ‪ ..‬ﻭﻴﻜﻭﻥ ﺩﻭﺭ ﻤﺩﺭﺱ ﺍﻟﻠﻐﺔ ﺍﻹﻨﺠﻠﻴﺯﻴﺔ ﺍﻟﺘﺄﻜﺩ ﻤﻥ ﺼﺤﺔ ﺘﺭﺠﻤـﺔ ﺍﻟـﻨﺹ‬
‫ﺍﻹﻨﺠﻠﻴﺯﻱ ﻭﻤﺩﻯ ﺃﻤﺎﻨﺔ ﺍﻟﺘﺭﺠﻤﺔ‪ ،‬ﻭﻤﺎ ﻨﺴﺒﺔ ﺍﻟﺘﺼﺭﻑ ﺍﻟﻤﺘﺎﺤﺔ‪.‬‬
‫ﻭﺍﻟﻬﺩﻑ ﻤﻥ ﻫﺫﻩ ﺍﻟﻤﺎﺩﺓ ﻫﻭ ﺘﻘﻭﻴﺔ ﻤﻬﺎﺭﺍﺕ ﺍﻟﺘﻠﻤﻴﺫ ﻭﺍﻟﻤﺩﺭﺴﻴﻥ ﺍﻟﻌﻠﻤﻴـﺔ ﻭﺍﻹﻨﺠﻠﻴﺯﻴـﺔ‬
‫ﻭﺍﻟﻌﺭﺒﻴﺔ‪ ،‬ﻜﻤﺎ ﺃﻨﻬﺎ ﺘﻌﺘﺒﺭ ﺘﺩﺭﻴﺒﺎ ﺘﻤﻬﻴﺩﻴﺎ ﻟﻘﻴﺎﻡ ﺍﻟﻁﺎﻟﺏ ﺒﺘﺭﺠﻤﺔ ﺍﻟﻤﺭﺍﺠﻊ ﻓﻲ ﺍﻟﺠﺎﻤﻌﺔ‪.‬‬

‫‪٤٦‬‬
‫‪ -٢‬ﺘﻌﺩﻴل ﻜﺘﺏ ﺍﻟﻌﻠﻭﻡ ﻭﺍﻟﺭﻴﺎﻀﺎﻴﺕ ﻓﻲ ﺍﻟﻤﺭﺤﻠﺔ ﺍﻹﻋﺩﺍﺩﻴﺔ ﻭﺍﻟﺜﺎﻨﻭﻴـﺔ‪ ،‬ﻟـﻀﻤﺎﻥ ﺫﻜـﺭ‬
‫ﺍﻟﻤﺼﻁﻠﺢ ﺍﻟﻌﻠﻤﻲ ﺍﻷﺠﻨﺒﻲ ﺒﺠﻭﺍﺭ ﺍﻟﻤﺼﻁﻠﺢ ﺍﻟﻌﻠﻤﻲ ﺍﻟﻌﺭﺒﻲ‪ ،‬ﺒﺤﻴﺙ ﻴﺄﻟﻔﻬﺎ ﺍﻟﺘﻼﻤﻴـﺫ‬
‫ﻭﻴﺴﻬل ﻋﻠﻴﻬﻡ ﺍﻟﺘﺭﺠﻤﺔ ﺍﻟﺘﺩﺭﻴﺒﻴﺔ ﻓﻲ ﺍﻟﻤﺭﺤﻠﺔ ﺍﻟﺜﺎﻨﻭﻴﺔ‪ ،‬ﻭﺍﻟﺘﺭﺠﻤﺔ ﺍﻟﻔﻌﻠﻴﺔ ﻓﻲ ﺍﻟﺠﺎﻤﻌﺔ‪.‬‬
‫‪ -٣‬ﻨﻔﺱ ﺍﻷﻤﺭ ﻓﻲ ﺍﻟﻤﺩﺍﺭﺱ ﺍﻷﺠﻨﺒﻴﺔ‪ ،‬ﺤﻴﺙ ﺃﻗﺘﺭﺡ ﺘﻌﺩﻴل ﻜﺘﺏ ﺍﻟﻌﻠﻭﻡ ﻭﺍﻟﺭﻴﺎﻀﺎﻴﺕ ﻓـﻲ‬
‫ﺠﻤﻴﻊ ﻤﺭﺍﺤل ﺍﻟﺩﺭﺍﺴﺔ‪ ،‬ﻟﻀﻤﺎﻥ ﺫﻜﺭ ﺍﻟﻤﺼﻁﻠﺢ ﺍﻟﻌﻠﻤﻲ ﺍﻟﻌﺭﺒﻲ ﺒﺠـﻭﺍﺭ ﺍﻟﻤـﺼﻁﻠﺢ‬
‫ﺍﻟﻌﻠﻤﻲ ﺍﻷﺠﻨﺒﻲ‪ ،‬ﺒﺤﻴﺙ ﻴﺄﻟﻔﻬﺎ ﺍﻟﺘﻼﻤﻴﺫ ﻭﻴﺴﻬل ﻋﻠﻴﻬﻡ ﺍﻟﺘﺭﺠﻤﺔ ﺍﻟﺘﺩﺭﻴﺒﻴﺔ ﻓﻲ ﺍﻟﻤﺭﺤﻠـﺔ‬
‫ﺍﻟﺜﺎﻨﻭﻴﺔ‪ ،‬ﻭﺍﻟﺘﺭﺠﻤﺔ ﺍﻟﻔﻌﻠﻴﺔ ﻓﻲ ﺍﻟﺠﺎﻤﻌﺔ‪.‬‬
‫‪ -٤‬ﺘﺘﻡ ﺍﻟﺘﺭﺠﻤﺔ ﻓﻲ ﺍﻟﻜﻠﻴﺎﺕ ﺍﻟﻌﻠﻤﻴﺔ ﻤﻥ ﺨﻼل ﻤﺎﺩﺓ ﺇﻟﺯﺍﻤﻴﺔ ﺍﺴﻤﻬﺎ "ﺘﺭﺠﻤﺔ ﻋﻠﻤﻴﺔ"‪ ،‬ﺒﺤﻴﺙ‬
‫ﻴﻜﻭﻥ ﻋﻠﻰ ﺍﻟﻁﺎﻟﺏ ﺘﺭﺠﻤﺔ ﻓﺼل ﻭﺍﺤﺩ ﻤﻥ ﺃﺤﺩ ﺍﻟﻤﺭﺍﺠﻊ ﺍﻷﺠﻨﺒﻴﺔ ﻓـﻲ ﻜـل ﻓـﺼل‬
‫ﺩﺭﺍﺴﻲ‪ ..‬ﺒﻬﺫﺍ ﺍﻟﻤﻌﺩل ﺴﻴﺤﺘﺎﺝ ﺍﻟﻁﺎﻟﺏ ﺇﻟﻰ ﺘﺭﺠﻤﺔ ﺃﻗل ﻤﻥ ﺼﻔﺤﺔ ﻓﻲ ﺍﻟﻴﻭﻡ ﻓﺤﺴﺏ‪.‬‬
‫ﻋﻠﻰ ﺃﻥ ﺘﻜﻭﻥ ﺩﺭﺠﺎﺕ ﻫﺫﻩ ﺍﻟﻤﺎﺩﺓ ﻤﻘﺴﻤﺔ ﺒﻴﻥ ﺠﻭﺩﺓ ﺍﻟﻤﻨﺘﺞ )ﺍﻟﻔﺼل ﺍﻟﻤﺘﺭﺠﻡ(‪ ،‬ﻭﺒـﻴﻥ‬
‫ﺍﻤﺘﺤﺎﻥ ﺘﺤﺭﻴﺭﻱ ﻓﻴﻪ ﺴﺅﺍﻻﻥ ﻋﻠﻰ ﺍﻷﻗل‪ :‬ﺴﺅﺍل ﻋﻥ ﺍﻟﻤﺤﺘﻭﻱ ﺍﻟﻌﻠﻤﻲ ﺒﺎﻹﻨﺠﻠﻴﺯﻴـﺔ‪،‬‬
‫ﻭﺴﺅﺍل ﻋﻥ ﺘﺭﺠﻤﺔ ﻓﻘﺭﺓ ﻤﻥ ﺍﻟﻜﺘﺎﺏ‪.‬‬
‫ﺒﻬﺫﺍ ﻨﻜﻭﻥ ﻀﻤﻨﺎ ﺍﺴﺘﻔﺎﺩﺓ ﺍﻟﻁﺎﻟﺏ ﻤﻥ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺭﺠﻤﺔ‪ ،‬ﻭﻗﻠﻠﻨﺎ ﺍﺤﺘﻤﺎﻻﺕ ﺘﺤﺎﻴﻠﻪ‪ ..‬ﻭﻓـﻲ‬
‫ﻨﻬﺎﻴﺔ ﺴﻨﻭﺍﺕ ﺍﻟﺩﺭﺍﺴﺔ ﻴﻜﻭﻥ ﻗﺩ ﺘﺭﻙ ﻟﻨﺎ ‪ ٨‬ﻓﺼﻭل ﺃﻭ ‪ ١٠‬ﻓﺼﻭل ﻤﺘﺭﺠﻤﺔ )ﺘﺒﻌﺎ ﻟﻌﺩﺩ‬
‫ﺴﻨﻭﺍﺕ ﺍﻟﺩﺭﺍﺴﺔ ﻓﻲ ﻜﻠﻴﺘﻪ(‪ ،‬ﻭﻫﻭ ﻤﺎ ﻴﻌﻨﻲ ﻤﺭﺠﻌﺎ ﻤﺘﻭﺴﻁ ﺍﻟﺤﺠﻡ‪ ..‬ﻭﺍﻟﻤﺭﺍﺠﻊ ﺍﻷﻜﺒـﺭ‬
‫ﻤﻥ ﻫﺫﺍ ﺘﻘﺴﻡ ﻋﻠﻰ ﺃﻜﺜﺭ ﻤﻥ ﻁﺎﻟﺏ‪.‬‬
‫‪ -٥‬ﺇﻀﺎﻓﺔ ﻤﺎﺩﺓ "ﻤﺭﺍﺠﻌﺔ ﺍﻟﺘﺭﺍﺠﻡ ﺍﻟﻌﻠﻤﻴﺔ" ﻓﻲ ﺍﻟﻜﻠﻴﺎﺕ ﺍﻟﻠﻐﻭﻴﺔ )ﺍﻟﺘﻲ ﺘﺩﺭﺱ ﺍﻟﻌﺭﺒﻴـﺔ ﺃﻭ‬
‫ﺍﻹﻨﺠﻠﻴﺯﻴﺔ( ﺒﺤﻴﺙ ﻴﺘﻭﻟﻰ ﻜل ﻁﺎﻟﺏ ﻓﻲ ﻜل ﻓﺼل ﺩﺭﺍﺴﻲ‪ ،‬ﻤﺭﺍﺠﻌـﺔ ﻓـﺼل ﻤـﻥ‬
‫ﺍﻟﻤﺘﺭﺠﻤﺎﺕ ﺍﻟﺘﻲ ﺃﻨﺘﺠﻬﺎ ﻁﻼﺏ ﺍﻟﻜﻠﻴﺎﺕ ﺍﻟﻌﻠﻤﻴﺔ‪ ،‬ﻭﻴﺭﻓﻊ ﺘﻘﺭﻴﺭﻩ ﻋﻠﻰ ﻤﻭﻗﻊ ﺍﻟﻤﺸﺭﻭﻉ‪،‬‬
‫ﻭﻴﻘﺩﻤﻪ ﺇﻟﻰ ﺃﺴﺘﺎﺫﻩ ﻟﻠﺤﺼﻭل ﻋﻠﻰ ﺍﻟﺩﺭﺠﺎﺕ‪.‬‬
‫***‬
‫ﻭﻗﺩ ﺃﻀﺎﻑ ﺍﻟﺒﺎﺤﺙ ﺍﻟﻠﻐﻭﻱ ﺃ‪ .‬ﺤﺴﻴﻥ ﻤﺤﻤﺩ ﺍﻟﺒﺴﻭﻤﻲ ﻫﺫﺍ ﺍﻻﻗﺘﺭﺍﺡ ﺇﻟﻰ ﺍﻟﻔﻜﺭﺓ‪:‬‬
‫‪٤٧‬‬
‫ﻤﻥ ﺍﻷﻫﺩﺍﻑ ﺍﻷﺴﺎﺴﻴﺔ ﺍﻟﺘﻲ ﺃﻨﺸﺊ ﻤﻥ ﺃﺠﻠﻬﺎ ﻤﺠﻤﻊ ﺍﻟﻠﻐﺔ ﺍﻟﻌﺭﺒﻴﺔ ﺒﺎﻟﻘﺎﻫﺭﺓ ﺴﻨﺔ ‪١٩٣٤‬‬
‫ﻜﺎﻥ ﺇﻨﺸﺎﺀ ﺍﻟﻤﻌﺠﻡ ﺍﻟﺘﺎﺭﻴﺨﻲ ﻟﻠﻐﺔ ﺍﻟﻌﺭﺒﻴﺔ‪ ..‬ﺫﻟﻙ ﺍﻟﻤﻌﺠﻡ ﺍﻟﺫﻱ ﻴﺠﻤﻊ ﻜل ﻜﻠﻤﺎﺕ ﺍﻟﻠﻐـﺔ‪،‬‬
‫ﻭﻴﺭﺼﺩ ﻜل ﻤﺎ ﻴﺘﻌﻠﻕ ﺒﻜل ﻜﻠﻤﺔ ﻓﻲ ﻜل ﺍﻟﻌﺼﻭﺭ ﺍﻟﺘﻲ ﻤﺭﺕ ﺒﻬﺎ‪ ،‬ﻭﻜل ﺍﻷﻤﺎﻜﻥ ﺍﻟﺘـﻲ‬
‫ﺤﻠﺕ ﻓﻴﻬﺎ‪ ،‬ﻓﻬﻭ ﻴﺅﻟﻑ ﻗﺼﺔ ﺤﻴﺎﺓ ﻜﺎﻤﻠﺔ ﻟﻜل ﻜﻠﻤﺔ ﻭﺃﻨﺎ ﺃﺘﺴﺎﺀل‪ :‬ﻤﺎﺫﺍ ﻟﻭ ﻜﹸﻠﻑ ﻁـﻼﺏ‬
‫ﺍﻟﺩﺭﺍﺴﺎﺕ ﺍﻟﻌﻠﻴﺎ )ﺍﻟﻤﺎﺠﺴﺘﻴﺭ ﻭﺍﻟﺩﻜﺘﻭﺭﺍﻩ( ﻓﻲ ﻜﻠﻴﺎﺕ ﻭﻤﻌﺎﻫﺩ ﺍﻟﻠﻐﺔ ﺍﻟﻌﺭﺒﻴﺔ ﻓـﻲ ﺠﻤﻴـﻊ‬
‫ﺍﻟﺩﻭل ﺍﻟﻌﺭﺒﻴﺔ ﺒﺩﺭﺍﺴﺔ ﻭﺇﻋﺩﺍﺩ ﻫﺫﺍ ﺍﻟﻤﻌﺠﻡ ﻤﻥ ﻋﺸﺭ ﺴﻨﻭﺍﺕ ﻤﻀﺕ ﻓﻘﻁ؟‪ ..‬ﻤـﺎﺫﺍ ﻟـﻭ‬
‫ﻭﺤﺩ ﺍﻷﺴﺎﺘﺫﺓ ﺍﻟﻜﺒﺎﺭ ﺠﻬﻭﺩﻫﻡ ﻓﻲ ﺭﺴﻡ ﺨﺭﻴﻁﺔ ﻁﺭﻴﻕ ﻭﺍﻀﺤﺔ ﺒﺎﻟﻤﻭﻀﻭﻋﺎﺕ ﻭﺍﻟﻘﻀﺎﻴﺎ‬
‫ﺍﻟﻤﻬﻤﺔ ﺍﻟﺘﻲ ﺘﺜﺭﻱ ﺍﻟﻌﻘل ﺍﻟﻌﺭﺒﻲ ﻭﺘﻤﻸ ﺍﻟﻔﺠﻭﺍﺕ ﺍﻟﺘﻲ ﺼﻨﻌﻬﺎ ﺍﻟﻐﺭﺏ ﻓﻲ ﻗﻠﺏ ﺍﻟﻌﻘـل‬
‫ﺍﻟﻌﺭﺒﻲ ﺍﻟﻤﻌﺎﺼﺭ؟‪ ..‬ﻤﺎﺫﺍ ﻟﻭ ﺃﺤﺴﻨﺎ ﺍﺴﺘﻐﻼل ﻫﺫﻩ ﺍﻟﺜﺭﻭﺓ ﺍﻟﻀﺨﻤﺔ ﻏﻴـﺭ ﺍﻟﻤـﺴﺘﻐﻠﺔ ـ‬
‫ﺃﻗﺼﺩ ﻁﻼﺏ ﺍﻟﻤﺎﺠﺴﺘﻴﺭ ﻭﺍﻟﺩﻜﺘﻭﺭﺍﻩ؟‪ ..‬ﻤﺎﺫﺍ ﻟﻭ ﺘﺨﻠﻴﻨﺎ ﻋﻥ ﺍﻟﻌﺸﻭﺍﺌﻴﺔ ﺍﻟﻔﻜﺭﻴﺔ ﻭﻟﻭ ﻋﻠﻰ‬
‫ﻤﺴﺘﻭﻯ ﺭﺠﺎل ﺍﻟﻔﻜﺭ ﻭﺍﻟﺜﻘﺎﻓﺔ ﺍﻟﺠﺎﻤﻌﻴﺔ؟‪ ..‬ﻤﺎﺫﺍ ﻟﻭ ﺍﻤﺘﻠﻜﺕ ﻫﺫﻩ ﺍﻟﻔﺌـﺔ ﺭﻭﺡ ﺍﻟﻤﺒـﺎﺩﺭﺓ‪،‬‬
‫ﻭﺘﺨﻠﺕ ﻋﻥ ﺭﻭﺡ ﺭﺩ ﺍﻟﻔﻌل ﺍﻟﺘﻲ ﻜﺩﻨﺎ ﻻ ﻨﺘﺒﻴﻨﻬﺎ ﻫﻲ ﺍﻷﺨﺭﻯ؟‪ ..‬ﻤﺎﺫﺍ ﻟﻭ‪...‬؟‬

‫ﺇﻥ ﻫﻨﺎﻙ ﺍﻟﻜﺜﻴﺭ ﻤﻤﺎ ﻴﻤﻜﻥ ﺍﺴﺘﺜﻤﺎﺭ ﻁﻠﺒﺔ ﺍﻟﺠﺎﻤﻌﺎﺕ ﻓﻴﻪ ﺩﻭﻥ ﺃﻥ ﻨﺩﻓﻊ ﻗﺭﺸﺎ ﺯﺍﺌﺩﺍ‪ ،‬ﻭﺴﻨﺤﺼل‬
‫ﻋﻠﻰ ﻨﺘﺎﺌﺞ ﺨﺭﺍﻓﻴﺔ‪ ،‬ﺩﻭﻥ ﺃﻥ ﻨﻅل ﻨﻨﺩﺏ ﺤﻅﻨﺎ ﻭﻨﻠﻌﻥ ﺘﺨﻠﻑ ﺍﻟﺘﻘﻨﻴﺔ ﻟﺩﻴﻨﺎ ﻭﻋﺠﺯﻨﺎ ﻋﻥ ﺍﻤﺘﻼﻙ‬
‫ﺍﻟﻤﺼﺎﻨﻊ ﻭﺍﻟﻤﻌﺎﻤل ﺍﻟﻤﺘﻁﻭﺭﺓ‪ ،‬ﻓﻨﺤﻥ ﺍﻵﻥ ﻓﻲ ﻋﺼﺭ ﺍﻟﻌﻭﻟﻤﺔ‪ ،‬ﻭﺍﻟﺘﻘﻨﻴـﺎﺕ ﺍﻟﺭﻗﻤﻴـﺔ ﺘﻌـﺩﻨﺎ‬
‫ﺒﺈﻤﻜﺎﻨﻴﺎﺕ ﺠﺒﺎﺭﺓ‪ ،‬ﻓﻘﻁ ﻟﻭ ﻜﺎﻥ ﻟﺩﻴﻨﺎ ﺇﺭﺍﺩﺓ ﺍﻟﺘﻐﻴﻴﺭ‪ ..‬ﻓﺈﻥ ﻟﻡ ﻨﺭﻜـﺏ ﺍﻟﻤﻭﺠـﺔ ﺍﻟﺜﺎﻟﺜـﺔ ﻤـﻥ‬
‫ﺍﻟﺤﻀﺎﺭﺓ ﺍﻵﻥ‪ ،‬ﻓﻠﻥ ﻴﻜﻭﻥ ﺃﻤﺎﻤﻨﺎ ﺇﻻ ﺍﻨﺘﻅﺎﺭ ﺨﺭﺍﺏ ﺍﻟﻌﺎﻟﻡ ﻟﻨﺘﺴﺎﻭﻯ ﺒﺎﻟﺠﻤﻴﻊ ﺘﺤﺕ ﺍﻟﺼﻔﺭ!‬
‫***‬
‫ﻭﻴﻤﻜﻥ ﺍﻟﺘﺩﺭﺝ ﻓﻲ ﺘﻨﻔﻴﺫ ﻫﺫﺍ ﺍﻟﻤﺸﺭﻭﻉ ﻜﺎﻟﺘﺎﻟﻲ‪:‬‬

‫‪٤٨‬‬
‫‪ -‬ﺇﺼﺩﺍﺭ ﺍﻟﺠﺎﻤﻌﺔ ﻤﺠﻼﺕ ﻋﻠﻤﻴﺔ ﻋﺭﺒﻴﺔ ﻤﺘﺨﺼﺼﺔ‪ ..‬ﻭﻴﻤﻜﻥ ﻁﺒﺎﻋﺔ ﺃﻋﺩﺍﺩ ﻗﻠﻴﻠﺔ ﻤﻨﻌـﺎ‬
‫ﻟﺯﻴﺎﺩﺓ ﺍﻟﺘﻜﻠﻔﺔ‪ ،‬ﻭﺍﻻﻋﺘﻤﺎﺩ ﻋﻠﻰ ﺇﻨﺸﺎﺀ ﻤﻭﻗﻊ ﻋﻠﻤﻲ ﻋﺭﺒﻲ ﻀﺨﻡ ﻋﻠﻰ ﺍﻹﻨﺘﺭﻨﺕ ﻭﻨﺸﺭ‬
‫ﻤﺤﺘﻭﻯ ﺍﻟﻤﺠﻠﺔ ﺍﻟﻤﻁﺒﻭﻋﺔ ﻋﻠﻴﻪ‪ ،‬ﻭﻫﺫﺍ ﺩﻋﺎﻴﺔ ﻟﻠﺠﺎﻤﻌﺔ ﻭﺇﻨﺠﺎﺯﺍﺘﻬﺎ‪.‬‬
‫‪ -‬ﺘﺤﻔﻴﺯ ﺍﻟﻁﻼﺏ ﺍﻟﻤﺘﻤﻴﺯﻴﻥ ﻟﺘﺭﺠﻤﺔ ﺃﺤﺩﺙ ﺍﻷﺒﺤﺎﺙ ﺍﻟﻌﻠﻤﻴﺔ ﻤﻥ ﺍﻟﻤﺠﻼﺕ ﺍﻟﻌﺎﻟﻤﻴﺔ ﻤﺜـل‬
‫‪ IEEE‬ﻭﻏﻴﺭﻫﺎ‪ ،‬ﻭﻴﻤﻜﻥ ﺃﻥ ﻴﺤﺼﻠﻭﺍ ﻋﻠﻰ ﺩﺭﺠﺎﺕ ﺇﻀﺎﻓﻴﺔ ﻨﻅﻴﺭ ﻫﺫﺍ‪.‬‬
‫‪ -‬ﺘﺤﻔﻴﺯ ﻜل ﻁﺎﻟﺏ ﻭﺃﺴﺘﺎﺫ ﻟﺘﺭﺠﻤﺔ ﻤﺸﺭﻭﻉ ﺍﻟﺘﺨﺭﺝ ﺃﻭ ﺭﺴﺎﻟﺔ ﺍﻟﻤﺎﺠﺴﺘﻴﺭ ﺃﻭ ﺍﻟـﺩﻜﺘﻭﺭﺍﻩ‬
‫ﺃﻭ ﺒﺤﺙ ﺍﻟﺘﺭﻗﻲ‪.‬‬
‫‪ -‬ﺍﻟﺘﻌﺎﻭﻥ ﻤﻊ ﺍﻟﺼﺤﻑ ﺍﻟﻴﻭﻤﻴﺔ ﻭﺍﻟﻤﺠﻼﺕ ﺍﻟﺸﻬﻴﺭﺓ‪ ،‬ﻟﺘﻨﺸﺭ ﻷﻋﻀﺎﺀ ﺍﻟﺠﺎﻤﻌـﺔ ﺒﻌـﺽ‬
‫ﺍﻟﻤﻘﺎﻻﺕ ﺍﻟﻌﻠﻤﻴﺔ ﻓﻲ ﺒﺎﺏ ﻴﻭﻤﻲ ﺃﻭ ﺃﺴﺒﻭﻋﻲ‪.‬‬
‫‪ -‬ﺍﻻﺴﺘﻔﺎﺩﺓ ﺒﺎﻟﺒﺤﻭﺙ ﺍﻟﻤﻌﺭﺒﺔ ﻓﻲ ﺍﻟﻘﻨـﻭﺍﺕ ﺍﻟﺘﻌﻠﻴﻤﻴـﺔ ﺍﻟﻔـﻀﺎﺌﻴﺔ ﻭﺍﻟﻘﻨـﻭﺍﺕ ﺍﻟﻌﻠﻤﻴـﺔ‬
‫ﺍﻟﻤﺘﺨﺼﺼﺔ‪.‬‬
‫‪ -‬ﺇﺫﺍ ﻨﺠﺤﺕ ﻫﺫﻩ ﺍﻟﻤﺭﺤﻠﺔ‪ ،‬ﻴﻤﻜﻥ ﺘﻜﻠﻴﻑ ﺍﻟﻁﻼﺏ ﺒﺘﺭﺠﻤـﺔ ﺍﻟﻤﺭﺍﺠـﻊ ﺍﻷﺠﻨﺒﻴـﺔ ﺍﻟﺘـﻲ‬
‫ﻴﺩﺭﺴﻭﻨﻬﺎ‪ ،‬ﺒﺤﻴﺙ ﻴﺘﺭﺠﻡ ﻜل ﻁﺎﻟﺏ ﻓﺼﻼ ﺃﻭ ﺃﻗل ﻜل ﻋﺎﻡ‪ ،‬ﻭﺒﺈﺸﺭﺍﻑ ﺃﺴﺎﺘﺫﺘﻪ‪.‬‬
‫‪ -‬ﻟﻭ ﻨﺠﺤﺕ ﻫﺫﻩ ﺍﻟﺘﺠﺭﺒﺔ‪ ،‬ﻓﺴﻴﻜﻭﻥ ﻤﻥ ﺍﻟﺴﻬل ﺍﻻﻨﺘﻘﺎل ﺇﻟﻰ ﺘﺭﺠﻤﺔ ﻤﺭﺍﺠﻊ ﻋﻠﻤﻴﺔ ﻤـﻥ‬
‫ﺨﺎﺭﺝ ﺍﻟﺩﺭﺍﺴﺔ ﻟﻜﻥ ﻓﻲ ﻨﻔﺱ ﺘﺨﺼﺹ ﻜل ﻁﺎﻟﺏ‪.‬‬
‫***‬
‫ﻭﺍﻟﺴﺅﺍل ﺍﻵﻥ‪ :‬ﻜﻴﻑ ﻴﻤﻜﻥ ﺇﻴﺼﺎل ﻫﺫﻩ ﺍﻷﻓﻜﺎﺭ ﻭﺍﻷﺴﺌﻠﺔ ﻭﺍﻻﻗﺘﺭﺍﺤﺎﺕ ﺇﻟﻰ ﺍﻟﻤـﺴﺌﻭﻟﻴﻥ ﻋـﻥ‬
‫ﺍﻟﺘﻌﻠﻴﻡ ﻓﻲ ﺍﻟﺩﻭل ﺍﻟﻌﺭﺒﻴﺔ‪ ،‬ﺃﻭ ﻓﻲ ﺍﻟﻠﺠﺎﻥ ﺍﻟﻤﺘﺨﺼﺼﺔ ﻓﻲ ﺍﻟﺠﺎﻤﻌﺔ ﺍﻟﻌﺭﺒﻴﺔ‪ ،‬ﻭﻜﻴﻑ ﻨﺩﻓﻌﻬﻡ ﺇﻟﻰ‬
‫ﺘﻨﻔﻴﺫﻫﺎ؟‬
‫ﺃﺭﺠﻭ ﻤﻥ ﻜل ﻤﻨﻜﻡ ﺃﻥ ﻴﻌﺘﺒﺭ ﺍﻟﻔﻜﺭﺓ ﻓﻜﺭﺘﻪ‪ ،‬ﻭﻴﺩﺨل ﻋﻠﻴﻬﺎ ﺍﻟﺘﻌﺩﻴﻼﺕ ﺍﻟﺘﻲ ﻴﺭﺍﻫـﺎ ﺃﻓـﻀل‪،‬‬
‫ﻭﻴﺴﺎﻫﻡ ﻓﻲ ﻨﺸﺭﻫﺎ ﻋﺒﺭ ﺍﻟﻤﻨﺘﺩﻴﺎﺕ ﻭﺍﻟﻤﺠﻤﻭﻋﺎﺕ ﺍﻟﺒﺭﻴﺩﻴﺔ ﻭﺍﻟﻤـﺩﻭﻨﺎﺕ ﻭﻗـﻭﺍﺌﻡ ﺍﻷﺼـﺩﻗﺎﺀ‪،‬‬
‫ﺇﻀﺎﻓﺔ ﺇﻟﻰ ﻤﺭﺍﺴﻠﺔ ﺍﻟﺼﺤﻑ ﻭﺍﻟﻔﻀﺎﺌﻴﺎﺕ ﻭﺍﻟﻤﺴﺌﻭﻟﻴﻥ ﻭﺃﺴﺎﺘﺫﺓ ﺍﻟﺠﺎﻤﻌﺎﺕ ﻓـﻲ ﻜـل ﺍﻟـﺩﻭل‬

‫‪٤٩‬‬
‫ﺍﻟﻌﺭﺒﻴﺔ‪ ..‬ﻓﺄﻫﻡ ﺸﻲﺀ ﺍﻵﻥ ﻫﻭ ﻨﺸﺭ ﻫﺫﻩ ﺍﻟﻔﻜﺭﺓ ﻋﻠﻰ ﺃﻭﺴﻊ ﻨﻁﺎﻕ ﻟﻴﺘﺎﺡ ﻟﻬﺎ ﻨﻘﺎﺵ ﻭﺍﺴﻊ ﻴﻜﻔل‬
‫ﺘﻁﻭﻴﺭﻫﺎ ﻭﺇﺤﻴﺎﺌﻬﺎ ﻓﻲ ﻋﻘﻭل ﻭﻨﻔﻭﺱ ﺠﻴل ﺠﺩﻴﺩ‪.‬‬
‫ﻭﻤﻥ ﻴﺩﺭﻱ‪ ،‬ﻓﻠﻌل ﻫﺫﻩ ﺍﻷﻓﻜﺎﺭ ﺘﺤﺩﺙ ﻓﺎﺭﻗﺎ‪ ،‬ﻭﺘﻨﺘﺸل ﻤﺠﺘﻤﻌﺎﺘﻨﺎ ﻤﻥ ﻫﻭﺓ ﺍﻟﺠﻬل ﻭﺍﻟﺘﺨﻠﻑ!‬
‫ﻭﺘﺫﻜﺭ ﺩﺍﺌﻤﺎ ﺃﻥ ﺍﻟﺸﺠﺭﺓ ﺍﻟﻌﻤﻼﻗﺔ ﻜﺎﻨﺕ ﺒﺫﺭﺓ ﻓﻲ ﻗﺒﻀﺔ ﺍﻟﻴﺩ‪ ،‬ﻭﺃﻥ )‪ .....‬ﻜﹶﻠ‪‬ﻤ‪‬ﺔﹰ ﻁﹶﻴ‪‬ﺒ‪‬ﺔﹰ ﻜﹶﺸﹶﺠ‪‬ﺭﺓ‪‬‬
‫ﻁﹶﻴ‪‬ﺒ‪‬ﺔ‪ ‬ﺃَﺼ‪‬ﻠﹸﻬ‪‬ﺎ ﺜﹶﺎﺒﹺﺕﹲ ﻭ‪‬ﻓﹶﺭ‪‬ﻋ‪‬ﻬ‪‬ﺎ ﻓ‪‬ﻲ ﺍﻟﺴ‪‬ﻤ‪‬ﺎﺀ }‪ {٢٤‬ﺘﹸﺅْﺘ‪‬ﻲ ﺃُﻜﹸﻠﹶﻬ‪‬ﺎ ﻜﹸلﱠ ﺤ‪‬ﻴﻥﹴ ﺒﹺﺈِﺫﹾﻥﹺ ﺭ‪‬ﺒ‪‬ﻬ‪‬ﺎ ﻭ‪‬ﻴ‪‬ﻀ‪‬ﺭﹺﺏ‪ ‬ﺍﻟﻠﹼﻪ‪‬‬
‫ﺍﻷَﻤ‪‬ﺜﹶﺎلَ ﻟِﻠﻨﱠﺎﺱﹺ ﻟﹶﻌ‪‬ﻠﱠﻬ‪‬ﻡ‪ ‬ﻴ‪‬ﺘﹶﺫﹶﻜﱠﺭ‪‬ﻭﻥ‪ ({٢٥} ‬ﻜﻤﺎ ﻗﺎل ﺴﺒﺤﺎﻨﻪ ﻓﻲ ﺴﻭﺭﺓ ﺇﺒﺭﺍﻫﻴﻡ‪ ..‬ﻓﻼ ﺘﻘﻠل ﺃﺒﺩﺍ ﻤﻥ‬
‫ﻗﻴﻤﺔ ﻜﻠﻤﺔ ﻁﻴﺒﺔ‪ ،‬ﺃﻭ ﻓﻜﺭﺓ ﺠﻴﺩﺓ‪ ،‬ﺃﻭ ﺨﻁﻭﺓ ﻋﻠﻰ ﺍﻟﻁﺭﻴﻕ‪ ،‬ﻓﻠﻴﺱ ﺍﻟﻤﻁﻠﻭﺏ ﻤﻥ ﻜـل ﻤﻨـﺎ ﺃﻥ‬
‫ﻴﻐﻴﺭ ﺍﻟﻌﺎﻟﻡ ﺒﻨﻔﺴﻪ‪ ..‬ﻜل ﺍﻟﻤﻁﻠﻭﺏ ﻤﻨﺎ ﺃﻥ ﻨﺒﺫل ﻤﺎ ﺒﻭﺴﻌﻨﺎ ﻟﺘﻭﺴﻴﻊ ﺩﺍﺌﺭﺓ ﺍﻟﻨﻭﺭ ﻤـﻥ ﺤﻭﻟﻨـﺎ‪..‬‬
‫ﻭﻴﻭﻤﺎ ﻤﺎ ـ ﻻ ﻴﻬﻡ ﻤﺘﻰ ـ ﺴﻨﺠﺩ ﺃﻥ ﺍﻟﻌﺎﻟﻡ ﻤﻥ ﺤﻭﻟﻨﺎ ﻗﺩ ﺼﺎﺭ ﻤﻀﻴﺌﺎ‪ ،‬ﻷﻥ ﻜﺜﻴﺭﺍ ﻤﻥ ﺃﻓﺭﺍﺩﻩ‬
‫ﻗﺩ ﺼﺎﺭﻭﺍ ﺸﻤﻭﻋﺎ‪ ..‬ﺃﻭ ﺸﻤﻭﺴﺎ!‬
‫ﻡ‪ .‬ﻤﺤﻤﺩ ﺤﻤﺩﻱ ﻏﺎﻨﻡ‬

‫ﻟﺘﻔﺎﺼﻴل ﺃﻜﺜﺭ‪ ،‬ﻴﻤﻜﻨﻙ ﺯﻴﺎﺭﺓ ﻤﺩﻭﻨﺔ ﺍﻟﻤﺸﺭﻭﻉ‪ ،‬ﻭﻓﻴﻬﺎ ﺃﻜﺜﺭ ﻤﻥ ‪ ٥٥‬ﻤﻘﺎﻻ ﺘﻭﻀﺢ ﺍﻟﻔﻜﺭﺓ ﻤـﻥ‬
‫ﺠﻤﻴﻊ ﺠﻭﺍﻨﺒﻬﺎ‪ ،‬ﻭﺘﺭﺩ ﻋﻠﻰ ﺃﻱ ﺍﻨﺘﻘﺎﺩ ﺃﻭ ﺘﺴﺎﺅل ﺤﻭﻟﻬﺎ‪.‬‬
‫‪http://uni-trans.blogspot.com‬‬

‫‪٥٠‬‬

You might also like