Windows Form Application එකක එන "Index was out of range" කියන error එක?
Windows Form Application භාවිතාකරල Software Develop කරනකොට ගොඩක් වෙලාවට භාවිතා කරනව DataGridView. මෙන්න මේ DataGridView භාවිතා කරනකොට මේ Error එක සුලභ දෙයක්.
මේකට හේතුව වෙන්නෙ, අපි මේ DataGridView එකට ලෝඩ් කරන table එකේ තියෙන column ගානට වට වැඩිය index එක දීමයි. column 10 ක් තියනම් 10 වෙනි column එකේ index එක වෙන්නෙ 9. ඉතින් 9 වෙනුවට එතනට 10 හෝ වෙන ඊට වඩා වැඩි එකක් හෝ 0 ට වඩා අඩු negative index එකක් හරි දුන්නොත් මේ error එක එන්න පුළුවන්.
උදාහරණයක් කියන්නම්, ඔයා ලග පොත් දහයක් තියෙනව කියල හිතන්න. දැන්, මං ඔයාගෙන් 11 වෙනි පොත ඉල්ලුවොත් මොකද වෙන්නෙ? අන්න ඒ විහිලුවම තමයි මෙතන වෙන්නෙත්.
මෙන්න මට ආපු එකක්,
dgvDivision.Columns[0].HeaderText = "Division";
මේකෙ index එක හරියටම දීලත් තියෙනව. ඒත්, මේ error එක එනව. ඒ කියන්නෙ අපි හදපු DataGridView එකේ තියෙන Column ගණන කියන්න ඕන මෙච්චරක් තියෙනවා කියල.
dgvDivision.ColumnCount = 7;
මේක බලන්න,
වැඩිවිස්තර සදහා මෙතනින් ගිහින් බලන්න.
තව, අපි ඔය code ටික වෙනම method එකක් විදියට ලියල එක call කරනකොට අපි මේ පහලින් පෙන්නන විදියට InitializeComponent(); එක තියන default method එක ඇතුලේ call කරනව. පහල විදියට. එතකොටත් අර error එක එනව. DgvDivisionStyle(); මේක තමයි මගෙ method එක.
"ගොඩක් වෙලාවට අපි DataGridView එකකට අදාල code කොටස් තැන් තැන් වල method ව්දියට හදල තියෙන්න පුළුවන්, උදාහරණයක් විදියට Data Load කරන්න වෙනම method එකකුත්, Style එක change කරන්න වෙනම එකකුත් ලිව්ව කියල හිතන්න. එතකොට අපි Data Load කරන්න කලින් Style වෙනස් කරපු එක call කලොත් එතකොට ඔය ගැටලුව එනව. මොකෝ data load නොවී කොහොමද දන්නෙ table එකේ තියෙන column ගණන. එතකොට index කියන්න බැනේ නොදැන. අන්න එතකොට ඕක එනව" [Code වලින්ම කරනකොට]
System.ArgumentOutOfRangeException: 'Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index'.
මේකට හේතුව වෙන්නෙ, අපි මේ DataGridView එකට ලෝඩ් කරන table එකේ තියෙන column ගානට වට වැඩිය index එක දීමයි. column 10 ක් තියනම් 10 වෙනි column එකේ index එක වෙන්නෙ 9. ඉතින් 9 වෙනුවට එතනට 10 හෝ වෙන ඊට වඩා වැඩි එකක් හෝ 0 ට වඩා අඩු negative index එකක් හරි දුන්නොත් මේ error එක එන්න පුළුවන්.
උදාහරණයක් කියන්නම්, ඔයා ලග පොත් දහයක් තියෙනව කියල හිතන්න. දැන්, මං ඔයාගෙන් 11 වෙනි පොත ඉල්ලුවොත් මොකද වෙන්නෙ? අන්න ඒ විහිලුවම තමයි මෙතන වෙන්නෙත්.
මෙන්න මට ආපු එකක්,
dgvDivision.Columns[0].HeaderText = "Division";
මේකෙ index එක හරියටම දීලත් තියෙනව. ඒත්, මේ error එක එනව. ඒ කියන්නෙ අපි හදපු DataGridView එකේ තියෙන Column ගණන කියන්න ඕන මෙච්චරක් තියෙනවා කියල.
dgvDivision.ColumnCount = 7;
මේක බලන්න,
වැඩිවිස්තර සදහා මෙතනින් ගිහින් බලන්න.
තව, අපි ඔය code ටික වෙනම method එකක් විදියට ලියල එක call කරනකොට අපි මේ පහලින් පෙන්නන විදියට InitializeComponent(); එක තියන default method එක ඇතුලේ call කරනව. පහල විදියට. එතකොටත් අර error එක එනව. DgvDivisionStyle(); මේක තමයි මගෙ method එක.
public ucSetting()එහෙම නැතුව DgvDivisionStyle(); මේ method එක call කරන්න හොදම තැන Form_Load event එකේ. එතකොට වැඩෙත් වෙනව error එකත් හරියනව. පහල විදියට
{
InitializeComponent();
DgvDivisionStyle();
}
private void ucSetting_Load(object sender, EventArgs e) { DgvDivisionStyle(); }ඒත් එහෙම හරියන අවස්ථා තියෙනවා, ඒහෙම වෙන්නෙත් නොදනිම. හැක්ස්... එනිසා මේකයි මට උන දේ,
"ගොඩක් වෙලාවට අපි DataGridView එකකට අදාල code කොටස් තැන් තැන් වල method ව්දියට හදල තියෙන්න පුළුවන්, උදාහරණයක් විදියට Data Load කරන්න වෙනම method එකකුත්, Style එක change කරන්න වෙනම එකකුත් ලිව්ව කියල හිතන්න. එතකොට අපි Data Load කරන්න කලින් Style වෙනස් කරපු එක call කලොත් එතකොට ඔය ගැටලුව එනව. මොකෝ data load නොවී කොහොමද දන්නෙ table එකේ තියෙන column ගණන. එතකොට index කියන්න බැනේ නොදැන. අන්න එතකොට ඕක එනව" [Code වලින්ම කරනකොට]


Comments
Post a Comment